@buddy-technology/offer-component 0.3.2 → 1.0.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/util/dictionary.ts","../src/util/index.ts","../src/hooks/useConfig.tsx","../src/hooks/useUpdateEffect.tsx","../src/components/BuddyOfferElement.tsx"],"sourcesContent":["const EXISTING_SCRIPT_MESSAGE = 'Buddy Offer Script is already loaded.';\n\nconst SCRIPTS = {\n\tLOCAL: {\n\t\tURL: 'http://localhost:8008/index.js',\n\t},\n\t// TODO: Delete this in favor of \"testing\", once we're sure nothing is using it.\n\tDEVELOPMENT: {\n\t\tURL: 'https://js.buddy.insure/v2/dev/index.js',\n\t},\n\tTESTING: {\n\t\tURL: 'https://js.buddy.insure/v2/testing/index.js',\n\t},\n\tSTAGING: {\n\t\tURL: 'https://js.buddy.insure/v2/staging/index.js',\n\t},\n\tPRODUCTION: {\n\t\tURL: 'https://js.buddy.insure/v2/index.js',\n\t},\n} as const;\n\nconst STAGES = Object.keys(SCRIPTS);\n\nexport {\n\tEXISTING_SCRIPT_MESSAGE,\n\tSCRIPTS,\n\tSTAGES,\n};\n","import { EXISTING_SCRIPT_MESSAGE, SCRIPTS, STAGES } from './dictionary';\nimport type { BuddyObject, IWindow } from '../interface';\n\ntype IStages = keyof typeof SCRIPTS;\n\nconst defaultOptions = {\n\tstage: 'STAGING',\n} as const;\n\nconst isEmptyOrNil = (value: any) => {\n\tconst isNil = (val: any) => [undefined, null].includes(val);\n\tconst isEmptyStr = (str: any) => typeof str === 'string' && str.trim().length === 0;\n\tconst isEmptyObjOrArr = (obj: any) => (typeof obj === 'object' && obj.length === undefined &&\n\t\tObject.keys(obj).length === 0) || (Array.isArray(obj) && obj.length === 0);\n\treturn (isNil(value) || isEmptyStr(value) || isEmptyObjOrArr(value));\n};\n\nconst validatePropertiesOfObject = (propsToCheck: string[], obj: Record<string, any>) => {\n\tconst emptyProps = propsToCheck.filter((prop) => isEmptyOrNil(obj[prop]));\n\tif (emptyProps.length) {\n\t\tconst displayMissingProps = emptyProps.reduce((prev, current, i) => {\n\t\t\tconst isLastEl = i === emptyProps.length - 1;\n\t\t\treturn isLastEl ? `${prev}${current}.` : `${prev}${current}, `;\n\t\t}, '');\n\t\treturn `The following props are required: ${displayMissingProps}`;\n\t}\n\treturn null;\n};\n\nexport const findScript = (url: string) => {\n\tconst scripts = Array.from(document.querySelectorAll('script'));\n\treturn scripts.find(({ src }) => src.startsWith(url));\n};\n\nexport const findOfferScript = (stage: IStages = defaultOptions.stage) => {\n\tconst { URL } = SCRIPTS[stage];\n\tconst matchedScript = findScript(URL);\n\treturn matchedScript;\n};\n\nexport const updateOffer = (options: Record<string, any>) => {\n\tif ((window as IWindow).Buddy) {\n\t\ttry {\n\t\t\t(window as IWindow).Buddy!.updateOffer(options);\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n\nconst createOffer = (options: Record<string, any>) => {\n\tif ((window as IWindow).Buddy) {\n\t\ttry {\n\t\t\t(window as IWindow).Buddy!.createOffer(options);\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n\nconst injectScript = (options: Record<string, any>) => {\n\tconst finalOptions = { ...defaultOptions, ...options };\n\tconst script = document.createElement('script');\n\tscript.src = `${SCRIPTS[finalOptions.stage].URL}`;\n\tscript.onload = () => createOffer(finalOptions);\n\tdocument.body.appendChild(script);\n\treturn script;\n};\n\nlet scriptPromise: Promise<BuddyObject | null> | null = null;\n\nexport const loadScript = (options: Record<string, any>) => {\n\t// Ensure that we only attempt to script once\n\tif (scriptPromise !== null) {\n\t\treturn scriptPromise;\n\t}\n\n\tscriptPromise = new Promise((resolve, reject) => {\n\t\tif (typeof window === 'undefined') {\n\t\t\t// Resolve to null when imported server side. This makes the module\n\t\t\t// safe to import in an isomorphic code base.\n\t\t\tresolve(null);\n\t\t\treturn;\n\t\t}\n\n\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(EXISTING_SCRIPT_MESSAGE);\n\t\t\tresolve((window as IWindow).Buddy!);\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst requiredProps = ['ion', 'partnerID'];\n\t\t\tconst missingRequiredProps = validatePropertiesOfObject(requiredProps, options);\n\n\t\t\tif (missingRequiredProps) {\n\t\t\t\treject(new Error(missingRequiredProps));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!options?.stage) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`No stage passed to BuddyOfferElement. Using default stage: ${defaultOptions.stage}`);\n\t\t\t}\n\n\t\t\t// If stage is passed, ensure it is one of the prescribed options.\n\t\t\tif (options?.stage && !STAGES.includes(options.stage)) {\n\t\t\t\tconst msg = `The stage prop must be one of: [${STAGES.join(' , ')}], but received \"${options.stage}.\"`;\n\t\t\t\treject(new Error(msg));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet script = findOfferScript(options?.stage);\n\n\t\t\tif (script) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(EXISTING_SCRIPT_MESSAGE);\n\t\t\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t\t\t\tresolve((window as IWindow).Buddy!);\n\t\t\t\t} else {\n\t\t\t\t\treject(new Error('Buddy Offer Element not available'));\n\t\t\t\t}\n\t\t\t} else if (!script) {\n\t\t\t\tscript = injectScript(options);\n\t\t\t}\n\n\t\t\tscript.addEventListener('load', () => {\n\t\t\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t\t\t\tresolve((window as IWindow).Buddy!);\n\t\t\t\t} else {\n\t\t\t\t\treject(new Error('Buddy Offer Element not available'));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tscript.addEventListener('error', () => {\n\t\t\t\treject(new Error('Failed to load Buddy Offer Element'));\n\t\t\t});\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\t});\n\n\treturn scriptPromise;\n};\n","import { useEffect, useState } from 'react';\nimport { findScript } from '../util';\nimport type { IWindow, ConfigObject } from '../interface';\n\nfunction useConfig(src: string) {\n\tconst [config, setConfig] = useState<ConfigObject | null>(null);\n\tconst [isLoading, setIsLoading] = useState(true);\n\n\tconst hasConfig = typeof window !== 'undefined';\n\n\tuseEffect(() => {\n\t\tlet script = findScript(src);\n\n\t\tif (!script) {\n\t\t\tscript = document.createElement('script');\n\t\t\tscript.src = src;\n\n\t\t\tscript.onload = () => {\n\t\t\t\t// Assuming the script sets a global variable named 'config'\n\t\t\t\tif (hasConfig) {\n\t\t\t\t\tsetConfig((window as IWindow).Buddy!.config!);\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdocument.body.appendChild(script);\n\t\t} else {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Config script is already loaded.');\n\t\t\tif (hasConfig) {\n\t\t\t\tsetConfig((window as IWindow).Buddy!.config!);\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (script) {\n\t\t\t\tdocument.body.removeChild(script);\n\t\t\t}\n\t\t};\n\t}, [src]);\n\n\treturn { config, isLoading };\n}\n\nexport default useConfig;\n","import { useEffect, useRef } from 'react';\n\nconst useUpdateEffect: typeof useEffect = (effect, deps) => {\n\tconst isFirstMount = useRef<boolean>(true);\n\t// need to return only in the else condition in case a cleanup func is passed in effect.\n\t// eslint-disable-next-line consistent-return\n\tuseEffect(() => {\n\t\tif (isFirstMount) {\n\t\t\tisFirstMount.current = false;\n\t\t} else {\n\t\t\treturn effect();\n\t\t}\n\t}, deps);\n};\n\nexport default useUpdateEffect;\n","import React from 'react';\nimport { useUpdateEffect } from '../hooks';\nimport { loadScript, updateOffer } from '../util';\nimport type { BuddyOfferElementProps } from '../interface';\n\nfunction BuddyOfferElement(options: BuddyOfferElementProps) {\n\tconst getScript = async () => {\n\t\ttry {\n\t\t\tawait loadScript(options);\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t}\n\t};\n\tgetScript();\n\n\tuseUpdateEffect(() => {\n\t\tupdateOffer(options);\n\t}, [options]);\n\n\treturn (\n\t\t<div id=\"buddy_offer\" />\n\t);\n}\n\nexport default BuddyOfferElement;\n"],"names":["EXISTING_SCRIPT_MESSAGE","SCRIPTS","LOCAL","URL","DEVELOPMENT","TESTING","STAGING","PRODUCTION","STAGES","Object","keys","defaultOptions","stage","isEmptyOrNil","value","isNil","val","undefined","includes","isEmptyStr","str","trim","length","isEmptyObjOrArr","obj","Array","isArray","validatePropertiesOfObject","propsToCheck","emptyProps","filter","prop","displayMissingProps","reduce","prev","current","i","isLastEl","findScript","url","scripts","from","document","querySelectorAll","find","src","startsWith","findOfferScript","matchedScript","updateOffer","options","window","Buddy","error","console","createOffer","injectScript","finalOptions","script","createElement","onload","body","appendChild","scriptPromise","loadScript","Promise","resolve","reject","warn","requiredProps","missingRequiredProps","Error","msg","join","addEventListener","useConfig","useState","config","setConfig","isLoading","setIsLoading","hasConfig","useEffect","removeChild","useUpdateEffect","effect","deps","isFirstMount","useRef","BuddyOfferElement","getScript","React","id"],"mappings":"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"}
@@ -0,0 +1,273 @@
1
+ import React, { useState, useEffect, useRef } from 'react';
2
+
3
+ function _extends() {
4
+ _extends = Object.assign || function (target) {
5
+ for (var i = 1; i < arguments.length; i++) {
6
+ var source = arguments[i];
7
+
8
+ for (var key in source) {
9
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
10
+ target[key] = source[key];
11
+ }
12
+ }
13
+ }
14
+
15
+ return target;
16
+ };
17
+
18
+ return _extends.apply(this, arguments);
19
+ }
20
+
21
+ const EXISTING_SCRIPT_MESSAGE = 'Buddy Offer Script is already loaded.';
22
+ const SCRIPTS = {
23
+ LOCAL: {
24
+ URL: 'http://localhost:8008/index.js'
25
+ },
26
+ // TODO: Delete this in favor of "testing", once we're sure nothing is using it.
27
+ DEVELOPMENT: {
28
+ URL: 'https://js.buddy.insure/v2/dev/index.js'
29
+ },
30
+ TESTING: {
31
+ URL: 'https://js.buddy.insure/v2/testing/index.js'
32
+ },
33
+ STAGING: {
34
+ URL: 'https://js.buddy.insure/v2/staging/index.js'
35
+ },
36
+ PRODUCTION: {
37
+ URL: 'https://js.buddy.insure/v2/index.js'
38
+ }
39
+ };
40
+ const STAGES = Object.keys(SCRIPTS);
41
+
42
+ const defaultOptions = {
43
+ stage: 'STAGING'
44
+ };
45
+
46
+ const isEmptyOrNil = value => {
47
+ const isNil = val => [undefined, null].includes(val);
48
+
49
+ const isEmptyStr = str => typeof str === 'string' && str.trim().length === 0;
50
+
51
+ const isEmptyObjOrArr = obj => typeof obj === 'object' && obj.length === undefined && Object.keys(obj).length === 0 || Array.isArray(obj) && obj.length === 0;
52
+
53
+ return isNil(value) || isEmptyStr(value) || isEmptyObjOrArr(value);
54
+ };
55
+
56
+ const validatePropertiesOfObject = (propsToCheck, obj) => {
57
+ const emptyProps = propsToCheck.filter(prop => isEmptyOrNil(obj[prop]));
58
+
59
+ if (emptyProps.length) {
60
+ const displayMissingProps = emptyProps.reduce((prev, current, i) => {
61
+ const isLastEl = i === emptyProps.length - 1;
62
+ return isLastEl ? `${prev}${current}.` : `${prev}${current}, `;
63
+ }, '');
64
+ return `The following props are required: ${displayMissingProps}`;
65
+ }
66
+
67
+ return null;
68
+ };
69
+
70
+ const findScript = url => {
71
+ const scripts = Array.from(document.querySelectorAll('script'));
72
+ return scripts.find(({
73
+ src
74
+ }) => src.startsWith(url));
75
+ };
76
+ const findOfferScript = (stage = defaultOptions.stage) => {
77
+ const {
78
+ URL
79
+ } = SCRIPTS[stage];
80
+ const matchedScript = findScript(URL);
81
+ return matchedScript;
82
+ };
83
+ const updateOffer = options => {
84
+ if (window.Buddy) {
85
+ try {
86
+ window.Buddy.updateOffer(options);
87
+ } catch (error) {
88
+ // eslint-disable-next-line no-console
89
+ console.error(error);
90
+ }
91
+ }
92
+ };
93
+
94
+ const createOffer = options => {
95
+ if (window.Buddy) {
96
+ try {
97
+ window.Buddy.createOffer(options);
98
+ } catch (error) {
99
+ // eslint-disable-next-line no-console
100
+ console.error(error);
101
+ }
102
+ }
103
+ };
104
+
105
+ const injectScript = options => {
106
+ const finalOptions = _extends({}, defaultOptions, options);
107
+
108
+ const script = document.createElement('script');
109
+ script.src = `${SCRIPTS[finalOptions.stage].URL}`;
110
+
111
+ script.onload = () => createOffer(finalOptions);
112
+
113
+ document.body.appendChild(script);
114
+ return script;
115
+ };
116
+
117
+ let scriptPromise = null;
118
+ const loadScript = options => {
119
+ // Ensure that we only attempt to script once
120
+ if (scriptPromise !== null) {
121
+ return scriptPromise;
122
+ }
123
+
124
+ scriptPromise = new Promise((resolve, reject) => {
125
+ var _window$Buddy;
126
+
127
+ if (typeof window === 'undefined') {
128
+ // Resolve to null when imported server side. This makes the module
129
+ // safe to import in an isomorphic code base.
130
+ resolve(null);
131
+ return;
132
+ }
133
+
134
+ if ((_window$Buddy = window.Buddy) != null && _window$Buddy.createOffer) {
135
+ // eslint-disable-next-line no-console
136
+ console.warn(EXISTING_SCRIPT_MESSAGE);
137
+ resolve(window.Buddy);
138
+ return;
139
+ }
140
+
141
+ try {
142
+ const requiredProps = ['ion', 'partnerID'];
143
+ const missingRequiredProps = validatePropertiesOfObject(requiredProps, options);
144
+
145
+ if (missingRequiredProps) {
146
+ reject(new Error(missingRequiredProps));
147
+ return;
148
+ }
149
+
150
+ if (!(options != null && options.stage)) {
151
+ // eslint-disable-next-line no-console
152
+ console.warn(`No stage passed to BuddyOfferElement. Using default stage: ${defaultOptions.stage}`);
153
+ } // If stage is passed, ensure it is one of the prescribed options.
154
+
155
+
156
+ if (options != null && options.stage && !STAGES.includes(options.stage)) {
157
+ const msg = `The stage prop must be one of: [${STAGES.join(' , ')}], but received "${options.stage}."`;
158
+ reject(new Error(msg));
159
+ return;
160
+ }
161
+
162
+ let script = findOfferScript(options == null ? void 0 : options.stage);
163
+
164
+ if (script) {
165
+ var _window$Buddy2;
166
+
167
+ // eslint-disable-next-line no-console
168
+ console.warn(EXISTING_SCRIPT_MESSAGE);
169
+
170
+ if ((_window$Buddy2 = window.Buddy) != null && _window$Buddy2.createOffer) {
171
+ resolve(window.Buddy);
172
+ } else {
173
+ reject(new Error('Buddy Offer Element not available'));
174
+ }
175
+ } else if (!script) {
176
+ script = injectScript(options);
177
+ }
178
+
179
+ script.addEventListener('load', () => {
180
+ var _window$Buddy3;
181
+
182
+ if ((_window$Buddy3 = window.Buddy) != null && _window$Buddy3.createOffer) {
183
+ resolve(window.Buddy);
184
+ } else {
185
+ reject(new Error('Buddy Offer Element not available'));
186
+ }
187
+ });
188
+ script.addEventListener('error', () => {
189
+ reject(new Error('Failed to load Buddy Offer Element'));
190
+ });
191
+ } catch (error) {
192
+ reject(error);
193
+ }
194
+ });
195
+ return scriptPromise;
196
+ };
197
+
198
+ function useConfig(src) {
199
+ const [config, setConfig] = useState(null);
200
+ const [isLoading, setIsLoading] = useState(true);
201
+ const hasConfig = typeof window !== 'undefined';
202
+ useEffect(() => {
203
+ let script = findScript(src);
204
+
205
+ if (!script) {
206
+ script = document.createElement('script');
207
+ script.src = src;
208
+
209
+ script.onload = () => {
210
+ // Assuming the script sets a global variable named 'config'
211
+ if (hasConfig) {
212
+ setConfig(window.Buddy.config);
213
+ setIsLoading(false);
214
+ }
215
+ };
216
+
217
+ document.body.appendChild(script);
218
+ } else {
219
+ // eslint-disable-next-line no-console
220
+ console.warn('Config script is already loaded.');
221
+
222
+ if (hasConfig) {
223
+ setConfig(window.Buddy.config);
224
+ setIsLoading(false);
225
+ }
226
+ }
227
+
228
+ return () => {
229
+ if (script) {
230
+ document.body.removeChild(script);
231
+ }
232
+ };
233
+ }, [src]);
234
+ return {
235
+ config,
236
+ isLoading
237
+ };
238
+ }
239
+
240
+ const useUpdateEffect = (effect, deps) => {
241
+ const isFirstMount = useRef(true); // need to return only in the else condition in case a cleanup func is passed in effect.
242
+ // eslint-disable-next-line consistent-return
243
+
244
+ useEffect(() => {
245
+ if (isFirstMount) {
246
+ isFirstMount.current = false;
247
+ } else {
248
+ return effect();
249
+ }
250
+ }, deps);
251
+ };
252
+
253
+ function BuddyOfferElement(options) {
254
+ const getScript = async () => {
255
+ try {
256
+ await loadScript(options);
257
+ } catch (error) {
258
+ // eslint-disable-next-line no-console
259
+ console.error(error);
260
+ }
261
+ };
262
+
263
+ getScript();
264
+ useUpdateEffect(() => {
265
+ updateOffer(options);
266
+ }, [options]);
267
+ return /*#__PURE__*/React.createElement("div", {
268
+ id: "buddy_offer"
269
+ });
270
+ }
271
+
272
+ export { BuddyOfferElement as default, useConfig };
273
+ //# sourceMappingURL=index.modern.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.modern.mjs","sources":["../src/util/dictionary.ts","../src/util/index.ts","../src/hooks/useConfig.tsx","../src/hooks/useUpdateEffect.tsx","../src/components/BuddyOfferElement.tsx"],"sourcesContent":["const EXISTING_SCRIPT_MESSAGE = 'Buddy Offer Script is already loaded.';\n\nconst SCRIPTS = {\n\tLOCAL: {\n\t\tURL: 'http://localhost:8008/index.js',\n\t},\n\t// TODO: Delete this in favor of \"testing\", once we're sure nothing is using it.\n\tDEVELOPMENT: {\n\t\tURL: 'https://js.buddy.insure/v2/dev/index.js',\n\t},\n\tTESTING: {\n\t\tURL: 'https://js.buddy.insure/v2/testing/index.js',\n\t},\n\tSTAGING: {\n\t\tURL: 'https://js.buddy.insure/v2/staging/index.js',\n\t},\n\tPRODUCTION: {\n\t\tURL: 'https://js.buddy.insure/v2/index.js',\n\t},\n} as const;\n\nconst STAGES = Object.keys(SCRIPTS);\n\nexport {\n\tEXISTING_SCRIPT_MESSAGE,\n\tSCRIPTS,\n\tSTAGES,\n};\n","import { EXISTING_SCRIPT_MESSAGE, SCRIPTS, STAGES } from './dictionary';\nimport type { BuddyObject, IWindow } from '../interface';\n\ntype IStages = keyof typeof SCRIPTS;\n\nconst defaultOptions = {\n\tstage: 'STAGING',\n} as const;\n\nconst isEmptyOrNil = (value: any) => {\n\tconst isNil = (val: any) => [undefined, null].includes(val);\n\tconst isEmptyStr = (str: any) => typeof str === 'string' && str.trim().length === 0;\n\tconst isEmptyObjOrArr = (obj: any) => (typeof obj === 'object' && obj.length === undefined &&\n\t\tObject.keys(obj).length === 0) || (Array.isArray(obj) && obj.length === 0);\n\treturn (isNil(value) || isEmptyStr(value) || isEmptyObjOrArr(value));\n};\n\nconst validatePropertiesOfObject = (propsToCheck: string[], obj: Record<string, any>) => {\n\tconst emptyProps = propsToCheck.filter((prop) => isEmptyOrNil(obj[prop]));\n\tif (emptyProps.length) {\n\t\tconst displayMissingProps = emptyProps.reduce((prev, current, i) => {\n\t\t\tconst isLastEl = i === emptyProps.length - 1;\n\t\t\treturn isLastEl ? `${prev}${current}.` : `${prev}${current}, `;\n\t\t}, '');\n\t\treturn `The following props are required: ${displayMissingProps}`;\n\t}\n\treturn null;\n};\n\nexport const findScript = (url: string) => {\n\tconst scripts = Array.from(document.querySelectorAll('script'));\n\treturn scripts.find(({ src }) => src.startsWith(url));\n};\n\nexport const findOfferScript = (stage: IStages = defaultOptions.stage) => {\n\tconst { URL } = SCRIPTS[stage];\n\tconst matchedScript = findScript(URL);\n\treturn matchedScript;\n};\n\nexport const updateOffer = (options: Record<string, any>) => {\n\tif ((window as IWindow).Buddy) {\n\t\ttry {\n\t\t\t(window as IWindow).Buddy!.updateOffer(options);\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n\nconst createOffer = (options: Record<string, any>) => {\n\tif ((window as IWindow).Buddy) {\n\t\ttry {\n\t\t\t(window as IWindow).Buddy!.createOffer(options);\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t}\n\t}\n};\n\nconst injectScript = (options: Record<string, any>) => {\n\tconst finalOptions = { ...defaultOptions, ...options };\n\tconst script = document.createElement('script');\n\tscript.src = `${SCRIPTS[finalOptions.stage].URL}`;\n\tscript.onload = () => createOffer(finalOptions);\n\tdocument.body.appendChild(script);\n\treturn script;\n};\n\nlet scriptPromise: Promise<BuddyObject | null> | null = null;\n\nexport const loadScript = (options: Record<string, any>) => {\n\t// Ensure that we only attempt to script once\n\tif (scriptPromise !== null) {\n\t\treturn scriptPromise;\n\t}\n\n\tscriptPromise = new Promise((resolve, reject) => {\n\t\tif (typeof window === 'undefined') {\n\t\t\t// Resolve to null when imported server side. This makes the module\n\t\t\t// safe to import in an isomorphic code base.\n\t\t\tresolve(null);\n\t\t\treturn;\n\t\t}\n\n\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn(EXISTING_SCRIPT_MESSAGE);\n\t\t\tresolve((window as IWindow).Buddy!);\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tconst requiredProps = ['ion', 'partnerID'];\n\t\t\tconst missingRequiredProps = validatePropertiesOfObject(requiredProps, options);\n\n\t\t\tif (missingRequiredProps) {\n\t\t\t\treject(new Error(missingRequiredProps));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!options?.stage) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(`No stage passed to BuddyOfferElement. Using default stage: ${defaultOptions.stage}`);\n\t\t\t}\n\n\t\t\t// If stage is passed, ensure it is one of the prescribed options.\n\t\t\tif (options?.stage && !STAGES.includes(options.stage)) {\n\t\t\t\tconst msg = `The stage prop must be one of: [${STAGES.join(' , ')}], but received \"${options.stage}.\"`;\n\t\t\t\treject(new Error(msg));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet script = findOfferScript(options?.stage);\n\n\t\t\tif (script) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(EXISTING_SCRIPT_MESSAGE);\n\t\t\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t\t\t\tresolve((window as IWindow).Buddy!);\n\t\t\t\t} else {\n\t\t\t\t\treject(new Error('Buddy Offer Element not available'));\n\t\t\t\t}\n\t\t\t} else if (!script) {\n\t\t\t\tscript = injectScript(options);\n\t\t\t}\n\n\t\t\tscript.addEventListener('load', () => {\n\t\t\t\tif ((window as IWindow).Buddy?.createOffer) {\n\t\t\t\t\tresolve((window as IWindow).Buddy!);\n\t\t\t\t} else {\n\t\t\t\t\treject(new Error('Buddy Offer Element not available'));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tscript.addEventListener('error', () => {\n\t\t\t\treject(new Error('Failed to load Buddy Offer Element'));\n\t\t\t});\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\t});\n\n\treturn scriptPromise;\n};\n","import { useEffect, useState } from 'react';\nimport { findScript } from '../util';\nimport type { IWindow, ConfigObject } from '../interface';\n\nfunction useConfig(src: string) {\n\tconst [config, setConfig] = useState<ConfigObject | null>(null);\n\tconst [isLoading, setIsLoading] = useState(true);\n\n\tconst hasConfig = typeof window !== 'undefined';\n\n\tuseEffect(() => {\n\t\tlet script = findScript(src);\n\n\t\tif (!script) {\n\t\t\tscript = document.createElement('script');\n\t\t\tscript.src = src;\n\n\t\t\tscript.onload = () => {\n\t\t\t\t// Assuming the script sets a global variable named 'config'\n\t\t\t\tif (hasConfig) {\n\t\t\t\t\tsetConfig((window as IWindow).Buddy!.config!);\n\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdocument.body.appendChild(script);\n\t\t} else {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.warn('Config script is already loaded.');\n\t\t\tif (hasConfig) {\n\t\t\t\tsetConfig((window as IWindow).Buddy!.config!);\n\t\t\t\tsetIsLoading(false);\n\t\t\t}\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (script) {\n\t\t\t\tdocument.body.removeChild(script);\n\t\t\t}\n\t\t};\n\t}, [src]);\n\n\treturn { config, isLoading };\n}\n\nexport default useConfig;\n","import { useEffect, useRef } from 'react';\n\nconst useUpdateEffect: typeof useEffect = (effect, deps) => {\n\tconst isFirstMount = useRef<boolean>(true);\n\t// need to return only in the else condition in case a cleanup func is passed in effect.\n\t// eslint-disable-next-line consistent-return\n\tuseEffect(() => {\n\t\tif (isFirstMount) {\n\t\t\tisFirstMount.current = false;\n\t\t} else {\n\t\t\treturn effect();\n\t\t}\n\t}, deps);\n};\n\nexport default useUpdateEffect;\n","import React from 'react';\nimport { useUpdateEffect } from '../hooks';\nimport { loadScript, updateOffer } from '../util';\nimport type { BuddyOfferElementProps } from '../interface';\n\nfunction BuddyOfferElement(options: BuddyOfferElementProps) {\n\tconst getScript = async () => {\n\t\ttry {\n\t\t\tawait loadScript(options);\n\t\t} catch (error) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error(error);\n\t\t}\n\t};\n\tgetScript();\n\n\tuseUpdateEffect(() => {\n\t\tupdateOffer(options);\n\t}, [options]);\n\n\treturn (\n\t\t<div id=\"buddy_offer\" />\n\t);\n}\n\nexport default BuddyOfferElement;\n"],"names":["EXISTING_SCRIPT_MESSAGE","SCRIPTS","LOCAL","URL","DEVELOPMENT","TESTING","STAGING","PRODUCTION","STAGES","Object","keys","defaultOptions","stage","isEmptyOrNil","value","isNil","val","undefined","includes","isEmptyStr","str","trim","length","isEmptyObjOrArr","obj","Array","isArray","validatePropertiesOfObject","propsToCheck","emptyProps","filter","prop","displayMissingProps","reduce","prev","current","i","isLastEl","findScript","url","scripts","from","document","querySelectorAll","find","src","startsWith","findOfferScript","matchedScript","updateOffer","options","window","Buddy","error","console","createOffer","injectScript","finalOptions","script","createElement","onload","body","appendChild","scriptPromise","loadScript","Promise","resolve","reject","warn","requiredProps","missingRequiredProps","Error","msg","join","addEventListener","useConfig","config","setConfig","useState","isLoading","setIsLoading","hasConfig","useEffect","removeChild","useUpdateEffect","effect","deps","isFirstMount","useRef","BuddyOfferElement","getScript","React","id"],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import React from 'react';
2
+ import type { BuddyOfferElementProps } from '../interface';
3
+ declare function BuddyOfferElement(options: BuddyOfferElementProps): React.JSX.Element;
4
+ export default BuddyOfferElement;
5
+ //# sourceMappingURL=BuddyOfferElement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuddyOfferElement.d.ts","sourceRoot":"","sources":["../../src/components/BuddyOfferElement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAE3D,iBAAS,iBAAiB,CAAC,OAAO,EAAE,sBAAsB,qBAkBzD;AAED,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default as BuddyOfferElement } from './BuddyOfferElement';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { default as useConfig } from './useConfig';
2
+ export { default as useUpdateEffect } from './useUpdateEffect';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ConfigObject } from '../interface';
2
+ declare function useConfig(src: string): {
3
+ config: ConfigObject | null;
4
+ isLoading: boolean;
5
+ };
6
+ export default useConfig;
7
+ //# sourceMappingURL=useConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConfig.d.ts","sourceRoot":"","sources":["../../src/hooks/useConfig.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,YAAY,EAAE,MAAM,cAAc,CAAC;AAE1D,iBAAS,SAAS,CAAC,GAAG,EAAE,MAAM;;;EAuC7B;AAED,eAAe,SAAS,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { useEffect } from 'react';
2
+ declare const useUpdateEffect: typeof useEffect;
3
+ export default useUpdateEffect;
4
+ //# sourceMappingURL=useUpdateEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUpdateEffect.d.ts","sourceRoot":"","sources":["../../src/hooks/useUpdateEffect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,OAAO,CAAC;AAE1C,QAAA,MAAM,eAAe,EAAE,OAAO,SAW7B,CAAC;AAEF,eAAe,eAAe,CAAC"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import { BuddyOfferElement } from './components';
2
+ export { useConfig } from './hooks';
3
+ export default BuddyOfferElement;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,70 @@
1
+ type ConfigObject = Record<string, any>;
2
+ interface BuddyObject {
3
+ createOffer: (options: any) => void;
4
+ updateOffer: (options: any) => void;
5
+ config?: ConfigObject;
6
+ }
7
+ interface IWindow extends Window {
8
+ Buddy?: BuddyObject;
9
+ }
10
+ type Stages = 'DEVELOPMENT' | 'TESTING' | 'STAGING' | 'PRODUCTION';
11
+ type ViewTypes = 'paginated' | 'single-form' | 'offer-only';
12
+ interface DataObject {
13
+ customer?: Record<string, any>;
14
+ policy?: Record<string, any>;
15
+ session?: Record<string, any>;
16
+ }
17
+ interface ColorSchema {
18
+ primary?: string;
19
+ secondary?: string;
20
+ tertiary?: string;
21
+ negative?: string;
22
+ positive?: string;
23
+ textPrimary?: string;
24
+ textSecondary?: string;
25
+ backgroundPrimary?: string;
26
+ backgroundSecondary?: string;
27
+ }
28
+ interface ThemeOverrides {
29
+ colors?: ColorSchema;
30
+ styles?: Record<string, any>;
31
+ webFonts?: string[];
32
+ }
33
+ interface ThemeObject {
34
+ baseTheme?: string;
35
+ palette?: string;
36
+ overrides?: ThemeOverrides;
37
+ }
38
+ interface LogoOverride {
39
+ src: string;
40
+ alt?: string;
41
+ url?: string;
42
+ }
43
+ interface EventData {
44
+ [x: string]: unknown;
45
+ timestamp: number;
46
+ }
47
+ interface EventObject {
48
+ eventType: string;
49
+ data: EventData;
50
+ }
51
+ type OnAddToCart = (data: DataObject) => void;
52
+ type OnRemoveFromCart = (data: DataObject) => void;
53
+ type ScrollToTopOverride = () => void;
54
+ type OnUserEvent = (event: EventObject) => void;
55
+ interface BuddyOfferElementProps {
56
+ ion: string;
57
+ partnerID: string;
58
+ data?: DataObject;
59
+ includeCheckout?: boolean;
60
+ logoOverride?: LogoOverride;
61
+ stage?: Stages;
62
+ theme?: ThemeObject;
63
+ viewType?: ViewTypes;
64
+ onAddToCart?: OnAddToCart;
65
+ onRemoveFromCart?: OnRemoveFromCart;
66
+ onUserEvent?: OnUserEvent;
67
+ overrideScrollToTop?: ScrollToTopOverride;
68
+ }
69
+ export type { BuddyObject, BuddyOfferElementProps, ConfigObject, IWindow, };
70
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interface/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ declare const EXISTING_SCRIPT_MESSAGE = "Buddy Offer Script is already loaded.";
2
+ declare const SCRIPTS: {
3
+ readonly LOCAL: {
4
+ readonly URL: "http://localhost:8008/index.js";
5
+ };
6
+ readonly DEVELOPMENT: {
7
+ readonly URL: "https://js.buddy.insure/v2/dev/index.js";
8
+ };
9
+ readonly TESTING: {
10
+ readonly URL: "https://js.buddy.insure/v2/testing/index.js";
11
+ };
12
+ readonly STAGING: {
13
+ readonly URL: "https://js.buddy.insure/v2/staging/index.js";
14
+ };
15
+ readonly PRODUCTION: {
16
+ readonly URL: "https://js.buddy.insure/v2/index.js";
17
+ };
18
+ };
19
+ declare const STAGES: string[];
20
+ export { EXISTING_SCRIPT_MESSAGE, SCRIPTS, STAGES, };
21
+ //# sourceMappingURL=dictionary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dictionary.d.ts","sourceRoot":"","sources":["../../src/util/dictionary.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,uBAAuB,0CAA0C,CAAC;AAExE,QAAA,MAAM,OAAO;;;;;;;;;;;;;;;;CAiBH,CAAC;AAEX,QAAA,MAAM,MAAM,UAAuB,CAAC;AAEpC,OAAO,EACN,uBAAuB,EACvB,OAAO,EACP,MAAM,GACN,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { SCRIPTS } from './dictionary';
2
+ import type { BuddyObject } from '../interface';
3
+ type IStages = keyof typeof SCRIPTS;
4
+ export declare const findScript: (url: string) => HTMLScriptElement | undefined;
5
+ export declare const findOfferScript: (stage?: IStages) => HTMLScriptElement | undefined;
6
+ export declare const updateOffer: (options: Record<string, any>) => void;
7
+ export declare const loadScript: (options: Record<string, any>) => Promise<BuddyObject | null>;
8
+ export {};
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,OAAO,EAAU,MAAM,cAAc,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAW,MAAM,cAAc,CAAC;AAEzD,KAAK,OAAO,GAAG,MAAM,OAAO,OAAO,CAAC;AA0BpC,eAAO,MAAM,UAAU,QAAS,MAAM,kCAGrC,CAAC;AAEF,eAAO,MAAM,eAAe,WAAW,OAAO,kCAI7C,CAAC;AAEF,eAAO,MAAM,WAAW,YAAa,OAAO,MAAM,EAAE,GAAG,CAAC,SASvD,CAAC;AAwBF,eAAO,MAAM,UAAU,YAAa,OAAO,MAAM,EAAE,GAAG,CAAC,gCAyEtD,CAAC"}
package/package.json CHANGED
@@ -1,29 +1,27 @@
1
1
  {
2
2
  "name": "@buddy-technology/offer-component",
3
- "version": "0.3.2",
3
+ "version": "1.0.0",
4
4
  "author": "Buddy Technology",
5
5
  "main": "dist/index.js",
6
- "types": "./lib/types.d.ts",
6
+ "module": "dist/index.modern.mjs",
7
+ "types": "./lib/index.d.ts",
7
8
  "license": "UNLICENSED",
8
9
  "private": false,
9
10
  "repository": {
10
11
  "type": "git",
11
- "url": "git://github.com/Buddy-Technology/offer-component.git"
12
+ "url": "git://github.com/Buddy-Technology/ion-to-react.git",
13
+ "directory": "packages/offer-component"
12
14
  },
13
15
  "bugs": {
14
- "url": "https://github.com/Buddy-Technology/offer-component/issues"
16
+ "url": "https://github.com/Buddy-Technology/ion-to-react/issues"
15
17
  },
16
- "homepage": "https://github.com/Buddy-Technology/offer-component#readme",
18
+ "homepage": "https://github.com/Buddy-Technology/ion-to-react#readme",
17
19
  "scripts": {
18
- "build": "rm -rf dist && NODE_ENV=production babel src --out-dir dist",
19
- "dev": "concurrently \"yarn watch:src\" \"cd test-app && PORT=3006 yarn dev\"",
20
+ "build": "NODE_ENV=production microbundle --jsx React.createElement --jsxImportSource react --no-compress --format modern,cjs",
21
+ "dev": "microbundle watch --jsx React.createElement --jsxImportSource react --no-compress --format modern,cjs",
20
22
  "deploy": "yarn version",
21
- "document": "jsdoc2md -c jsdoc.config.json src/index.js > API.md && node createTypesFile",
22
- "postversion": "yarn document && yarn build && ./deploy.sh",
23
- "watch:src": "rm -rf dist && NODE_ENV=development babel src --out-dir dist --watch",
24
- "start": "ESLINT_NO_DEV_ERRORS=true react-scripts start",
25
- "test": "react-scripts test",
26
- "eject": "react-scripts eject"
23
+ "release": "npx --no-install semantic-release",
24
+ "test": "jest"
27
25
  },
28
26
  "eslintConfig": {
29
27
  "extends": [
@@ -44,25 +42,21 @@
44
42
  ]
45
43
  },
46
44
  "devDependencies": {
47
- "@babel/cli": "^7.17.10",
48
- "@babel/core": "^7.17.10",
49
- "@babel/preset-env": "^7.17.10",
50
- "concurrently": "^7.3.0",
51
- "core-js": "^3.22.4",
52
- "eslint-config-airbnb": "^19.0.4",
53
- "eslint-plugin-import": "^2.26.0",
54
- "eslint-plugin-jsx-a11y": "^6.5.1",
55
- "eslint-plugin-react": "^7.29.4",
56
- "jsdoc": "^3.6.10",
57
- "jsdoc-to-markdown": "^7.1.1",
58
- "jsdoc-tsimport-plugin": "^1.0.5",
59
- "react": "^18.1.0",
60
- "react-scripts": "5.0.1",
61
- "regenerator-runtime": "^0.13.9",
62
- "tsd-jsdoc": "^2.5.0"
45
+ "@testing-library/dom": "^9.3.3",
46
+ "@testing-library/jest-dom": "^6.1.4",
47
+ "@testing-library/react": "^14.1.2",
48
+ "@testing-library/user-event": "^14.5.1",
49
+ "@types/jest": "^29.5.10",
50
+ "eslint-config-custom": "*",
51
+ "microbundle": "^0.15.1",
52
+ "ts-jest": "^29.1.1",
53
+ "typescript": "^5.3.2"
63
54
  },
64
55
  "peerDependencies": {
65
56
  "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
66
57
  "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
58
+ },
59
+ "publishConfig": {
60
+ "access": "public"
67
61
  }
68
62
  }
@@ -0,0 +1,22 @@
1
+ module.exports = {
2
+ extends: 'semantic-release-monorepo',
3
+ branches: ['main'],
4
+ plugins: [
5
+ '@semantic-release/commit-analyzer',
6
+ '@semantic-release/release-notes-generator',
7
+ '@semantic-release/changelog',
8
+ '@semantic-release/npm',
9
+ [
10
+ '@semantic-release/git',
11
+ {
12
+ assets: [
13
+ 'CHANGELOG.md',
14
+ 'package.json',
15
+ ],
16
+ // eslint-disable-next-line no-template-curly-in-string
17
+ message: 'chore(release): set `package.json` to ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}',
18
+ },
19
+ ],
20
+ '@semantic-release/github',
21
+ ],
22
+ };
package/setupTests.ts ADDED
@@ -0,0 +1,8 @@
1
+ import '@testing-library/jest-dom';
2
+
3
+ const {
4
+ TextDecoder, TextEncoder,
5
+ } = require('util');
6
+
7
+ global.TextEncoder = TextEncoder;
8
+ global.TextDecoder = TextDecoder;