@bikdotai/bik-widgets 1.0.0 → 1.0.2

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 (207) hide show
  1. package/dist-package/index.css +95 -0
  2. package/dist-package/index.js +2 -0
  3. package/package.json +17 -4
  4. package/.eslintrc +0 -22
  5. package/.eslintrc.js +0 -19
  6. package/.github/workflows/main.yml +0 -293
  7. package/.prettierignore +0 -13
  8. package/.prettierrc +0 -10
  9. package/cypress/apiHelper/endpoints.ts +0 -21
  10. package/cypress/apiHelper/executor.ts +0 -42
  11. package/cypress/e2e/bottomDrawer.cy.ts +0 -49
  12. package/cypress/e2e/directReward.cy.ts +0 -67
  13. package/cypress/e2e/scratchTheCard.cy.ts +0 -68
  14. package/cypress/e2e/stw.cy.ts +0 -82
  15. package/cypress/e2e/waRedirection.cy.ts +0 -46
  16. package/cypress/fixtures/payloads.ts +0 -330
  17. package/cypress/support/commands.ts +0 -37
  18. package/cypress/support/e2e.ts +0 -20
  19. package/cypress.staging.config.ts +0 -23
  20. package/jsconfig.json +0 -6
  21. package/localtest.sh +0 -10
  22. package/log-server.js +0 -86
  23. package/postcss.config.js +0 -8
  24. package/src/Globals.d.ts +0 -2
  25. package/src/assets/lottie/santa.json +0 -11722
  26. package/src/assets/svg/CalendarClockIcon.tsx +0 -30
  27. package/src/assets/svg/CalendarIcon.tsx +0 -24
  28. package/src/assets/svg/CheckIcon.tsx +0 -17
  29. package/src/assets/svg/ChevronIcon.tsx +0 -21
  30. package/src/assets/svg/Close.tsx +0 -39
  31. package/src/assets/svg/Confetti.tsx +0 -140
  32. package/src/assets/svg/Copy.tsx +0 -26
  33. package/src/assets/svg/DropdownCheckIcon.tsx +0 -35
  34. package/src/assets/svg/ErrorIcon.tsx +0 -27
  35. package/src/assets/svg/RadioIcon.tsx +0 -25
  36. package/src/assets/svg/UncheckedCheckboxIcon.tsx +0 -28
  37. package/src/assets/svg/UncheckedRadioIcon.tsx +0 -26
  38. package/src/assets/svg/info.tsx +0 -30
  39. package/src/assets/svg/qrcode.svg +0 -14
  40. package/src/bootstrap.tsx +0 -8
  41. package/src/components/CtaCard/index.tsx +0 -37
  42. package/src/components/CtaCard/preview.module.css +0 -32
  43. package/src/components/CtaCard/style.module.css +0 -32
  44. package/src/components/EmailInput/emailInputBox.tsx +0 -95
  45. package/src/components/Fab/index.tsx +0 -224
  46. package/src/components/Fab/preview.module.css +0 -28
  47. package/src/components/Fab/style.module.css +0 -37
  48. package/src/components/Icons/Call.tsx +0 -26
  49. package/src/components/Icons/Cross.tsx +0 -24
  50. package/src/components/Icons/Gmail.tsx +0 -61
  51. package/src/components/Icons/Instagram.tsx +0 -60
  52. package/src/components/Icons/LiveChat.tsx +0 -43
  53. package/src/components/Icons/Messenger.tsx +0 -57
  54. package/src/components/Icons/Send.tsx +0 -22
  55. package/src/components/Icons/Whatsapp.tsx +0 -24
  56. package/src/components/Shimmer/index.tsx +0 -12
  57. package/src/components/Shimmer/style.module.css +0 -37
  58. package/src/components/SmsInput/smsInputBox.tsx +0 -135
  59. package/src/components/UserDetailsV2/userDetailsV2.desktop.module.css +0 -52
  60. package/src/components/UserDetailsV2/userDetailsV2.mobile.module.css +0 -52
  61. package/src/components/UserDetailsV2/userDetailsV2.module.css +0 -81
  62. package/src/components/UserDetailsV2/userDetailsV2.tsx +0 -527
  63. package/src/components/WhatsappInput/Spinner.tsx +0 -26
  64. package/src/components/WhatsappInput/whatsappInput.module.css +0 -106
  65. package/src/components/WhatsappInput/whatsappInputBox.tsx +0 -155
  66. package/src/components/WhatsappInput/whatsappInputPreviewDesktop.module.css +0 -71
  67. package/src/components/WhatsappInput/whatsappInputPreviewMobile.module.css +0 -65
  68. package/src/components/checkbox/checkbox.module.css +0 -19
  69. package/src/components/checkbox/checkbox.tsx +0 -88
  70. package/src/components/countryCodePicker/countriesDropdown.module.css +0 -77
  71. package/src/components/countryCodePicker/countriesDropdown.tsx +0 -81
  72. package/src/components/couponDetails/coupon.module.css +0 -208
  73. package/src/components/couponDetails/coupon.tsx +0 -210
  74. package/src/components/couponDetails/couponPreviewDesktop.module.css +0 -158
  75. package/src/components/couponDetails/couponPreviewMobile.module.css +0 -164
  76. package/src/components/index.ts +0 -3
  77. package/src/components/inputComponents/Checkbox.module.css +0 -197
  78. package/src/components/inputComponents/Checkbox.tsx +0 -85
  79. package/src/components/inputComponents/DatePicker.module.css +0 -565
  80. package/src/components/inputComponents/DatePicker.tsx +0 -278
  81. package/src/components/inputComponents/Dropdown.module.css +0 -796
  82. package/src/components/inputComponents/Dropdown.tsx +0 -630
  83. package/src/components/inputComponents/InputBox.module.css +0 -401
  84. package/src/components/inputComponents/InputBox.tsx +0 -209
  85. package/src/components/selectedCountry/selectedCountry.module.css +0 -76
  86. package/src/components/selectedCountry/selectedCountry.tsx +0 -76
  87. package/src/components/selectedCountry/selectedCountryPreviewDesktop.module.css +0 -56
  88. package/src/components/selectedCountry/selectedCountryPreviewMobile.module.css +0 -57
  89. package/src/components/userDetailsForm/RenderCustomFields.tsx +0 -333
  90. package/src/components/userDetailsForm/userDetailsForm.tsx +0 -675
  91. package/src/hooks/index.ts +0 -4
  92. package/src/hooks/useExitIntent.ts +0 -452
  93. package/src/hooks/useIsMobile.tsx +0 -21
  94. package/src/hooks/useMessageEvent.ts +0 -8
  95. package/src/hooks/useTriggeredIntentDetails.ts +0 -43
  96. package/src/hooks/useUrlListerner.ts +0 -30
  97. package/src/hooks/useWebSocketLogger.ts +0 -59
  98. package/src/hooks/useWindowEvent.ts +0 -8
  99. package/src/icons/copyIcon.tsx +0 -26
  100. package/src/icons/crossIconDesktop.tsx +0 -20
  101. package/src/icons/crossIconMobile.tsx +0 -20
  102. package/src/index.html +0 -30
  103. package/src/index.ts +0 -32
  104. package/src/index.tsx +0 -1
  105. package/src/repo/widgetRepo.ts +0 -21
  106. package/src/types/customFields.ts +0 -73
  107. package/src/utilities/cookie.ts +0 -70
  108. package/src/utilities/customFieldTypeMapping.ts +0 -67
  109. package/src/utilities/customFieldValidation.ts +0 -201
  110. package/src/utilities/encryption.ts +0 -21
  111. package/src/utilities/exitIntentUtils.ts +0 -31
  112. package/src/utilities/global.css +0 -11
  113. package/src/utilities/languageUtilities.ts +0 -235
  114. package/src/utilities/localRunner.js +0 -26
  115. package/src/utilities/localRunner.ts +0 -27
  116. package/src/utilities/localStorage.ts +0 -40
  117. package/src/utilities/script.tsx +0 -15
  118. package/src/utilities/stringUtils.ts +0 -5
  119. package/src/utilities/styleUtils.ts +0 -134
  120. package/src/utilities/variables.ts +0 -11
  121. package/src/utilities/widgetUtils.js +0 -342
  122. package/src/utilities/widgetUtils.ts +0 -313
  123. package/src/widgets/BottomDrawer/config.ts +0 -41
  124. package/src/widgets/BottomDrawer/index.tsx +0 -116
  125. package/src/widgets/BottomDrawer/modal.tsx +0 -286
  126. package/src/widgets/BottomDrawer/preview.module.css +0 -122
  127. package/src/widgets/BottomDrawer/previewMobile.module.css +0 -124
  128. package/src/widgets/BottomDrawer/style.module.css +0 -279
  129. package/src/widgets/CaptivateBanner/captivateBanner.tsx +0 -200
  130. package/src/widgets/CaptivateBanner/config.ts +0 -72
  131. package/src/widgets/CaptivateBanner/index.tsx +0 -204
  132. package/src/widgets/CaptivateBanner/previewDesktop.module.css +0 -51
  133. package/src/widgets/CaptivateBanner/previewMobile.module.css +0 -51
  134. package/src/widgets/CaptivateBanner/style.module.css +0 -77
  135. package/src/widgets/CaptivateBanner/utils.ts +0 -104
  136. package/src/widgets/CentrallyAlignedPopup/config.ts +0 -42
  137. package/src/widgets/CentrallyAlignedPopup/index.tsx +0 -109
  138. package/src/widgets/CentrallyAlignedPopup/modal.tsx +0 -269
  139. package/src/widgets/CentrallyAlignedPopup/preview.module.css +0 -153
  140. package/src/widgets/CentrallyAlignedPopup/previewMobile.module.css +0 -153
  141. package/src/widgets/CentrallyAlignedPopup/style.module.css +0 -283
  142. package/src/widgets/DirectReward/components/couponDetails.tsx +0 -265
  143. package/src/widgets/DirectReward/components/userDetails.tsx +0 -117
  144. package/src/widgets/DirectReward/config.ts +0 -186
  145. package/src/widgets/DirectReward/directReward.tsx +0 -350
  146. package/src/widgets/DirectReward/index.tsx +0 -579
  147. package/src/widgets/DirectReward/previewStyles/thankYouPreviewDesktop.module.css +0 -276
  148. package/src/widgets/DirectReward/previewStyles/thankYouPreviewMobile.module.css +0 -303
  149. package/src/widgets/DirectReward/previewStyles/userDetailsPreviewDesktop.module.css +0 -511
  150. package/src/widgets/DirectReward/previewStyles/userDetailsPreviewMobile.module.css +0 -462
  151. package/src/widgets/DirectReward/style.module.css +0 -836
  152. package/src/widgets/ExitIntentHook.tsx +0 -28
  153. package/src/widgets/STW/api.ts +0 -70
  154. package/src/widgets/STW/components/svgFactory.tsx +0 -44
  155. package/src/widgets/STW/config.ts +0 -193
  156. package/src/widgets/STW/context.ts +0 -7
  157. package/src/widgets/STW/couponDetails.tsx +0 -121
  158. package/src/widgets/STW/index.tsx +0 -733
  159. package/src/widgets/STW/previewStyles/thankyouPreviewDesktop.module.css +0 -215
  160. package/src/widgets/STW/previewStyles/thankyouPreviewMobile.module.css +0 -205
  161. package/src/widgets/STW/previewStyles/userInputsPreviewDesktop.module.css +0 -732
  162. package/src/widgets/STW/previewStyles/userInputsPreviewMobile.module.css +0 -661
  163. package/src/widgets/STW/previewStyles/wheelPreviewDesktop.module.css +0 -498
  164. package/src/widgets/STW/previewStyles/wheelPreviewMobile.module.css +0 -497
  165. package/src/widgets/STW/stw1.tsx +0 -119
  166. package/src/widgets/STW/stw2Components/wheelDesign.tsx +0 -183
  167. package/src/widgets/STW/stw2Pages/couponDetails.tsx +0 -72
  168. package/src/widgets/STW/stw2Pages/stw2.tsx +0 -212
  169. package/src/widgets/STW/stw2Pages/style.module.css +0 -1226
  170. package/src/widgets/STW/stw2Pages/userDetails.tsx +0 -86
  171. package/src/widgets/STW/stw2Pages/wheel.tsx +0 -117
  172. package/src/widgets/STW/stw2PreviewStyles/thankyouPreviewDesktop.module.css +0 -835
  173. package/src/widgets/STW/stw2PreviewStyles/thankyouPreviewMobile.module.css +0 -787
  174. package/src/widgets/STW/stw2PreviewStyles/userInputsPreviewDesktop.module.css +0 -867
  175. package/src/widgets/STW/stw2PreviewStyles/userInputsPreviewMobile.module.css +0 -798
  176. package/src/widgets/STW/stw2PreviewStyles/wheelPreviewDesktop.module.css +0 -572
  177. package/src/widgets/STW/stw2PreviewStyles/wheelPreviewMobile.module.css +0 -559
  178. package/src/widgets/STW/style.module.css +0 -901
  179. package/src/widgets/STW/userDetails.tsx +0 -150
  180. package/src/widgets/STW/utility.ts +0 -664
  181. package/src/widgets/STW/wheel.tsx +0 -304
  182. package/src/widgets/ScratchCard/ScratchOff/scratchOff.tsx +0 -157
  183. package/src/widgets/ScratchCard/config.ts +0 -152
  184. package/src/widgets/ScratchCard/globalStyle.module.css +0 -931
  185. package/src/widgets/ScratchCard/index.tsx +0 -546
  186. package/src/widgets/ScratchCard/modal.tsx +0 -225
  187. package/src/widgets/ScratchCard/preview.module.css +0 -250
  188. package/src/widgets/ScratchCard/previewMobile.module.css +0 -247
  189. package/src/widgets/ScratchCard/previewStyles/userDetailsPreviewDesktop.module.css +0 -537
  190. package/src/widgets/ScratchCard/previewStyles/userDetailsPreviewMobile.module.css +0 -463
  191. package/src/widgets/ScratchCard/style.module.css +0 -220
  192. package/src/widgets/ShopifyForm/config.ts +0 -168
  193. package/src/widgets/ShopifyForm/index.tsx +0 -214
  194. package/src/widgets/ShopifyForm/previewDesktop.module.css +0 -117
  195. package/src/widgets/ShopifyForm/previewMobile.module.css +0 -131
  196. package/src/widgets/ShopifyForm/shopifyForm.tsx +0 -445
  197. package/src/widgets/ShopifyForm/style.module.css +0 -161
  198. package/src/widgets/SingleButtonRedirection/config.ts +0 -47
  199. package/src/widgets/SingleButtonRedirection/index.tsx +0 -121
  200. package/src/widgets/WebStories/config.ts +0 -105
  201. package/src/widgets/WebStories/index.css +0 -3
  202. package/src/widgets/WebStories/index.tsx +0 -282
  203. package/src/widgets/WebStories/style.module.css +0 -26
  204. package/src/widgets/index.tsx +0 -3
  205. package/src/widgets/utility.ts +0 -31
  206. package/tsconfig.json +0 -12
  207. package/webpack.config.js +0 -239
@@ -1,546 +0,0 @@
1
- import React, { useEffect, useState, Suspense } from 'react';
2
- import includeMe from 'utilities/script';
3
- import { IPageConfigProcessed, WidgetUtils } from 'utilities/widgetUtils';
4
- import { shouldShowExitIntent } from 'utilities/exitIntentUtils';
5
- import { CookieUtils } from 'utilities/cookie';
6
- import Fab, { IFab } from 'components/Fab';
7
- import Send from '../../components/Icons/Send';
8
- import { COOKIE_VALUES, EVENT_NAME } from 'utilities/variables';
9
- import UserDetails, { IUserInputs } from '../STW/userDetails';
10
- import {
11
- fetchCouponCode,
12
- IChannelInfo,
13
- IPayloadFetchCouponCode,
14
- } from '../STW/api';
15
- import ScratchCardModal from './modal';
16
- import { getCookie, getScrollPercent, setCookie } from '../STW/utility';
17
- import CouponDetails from '../STW/couponDetails';
18
- import {
19
- ISTCWidgetCustomisation,
20
- ISTWWidgetLeadGeneration,
21
- ISTWWidgetVisibility,
22
- WIDGET_NAME,
23
- WidgetInfo,
24
- WidgetSchema,
25
- } from '@bikdotai/bik-models/dm';
26
- import {
27
- LOCAL_STORAGE_KEYS,
28
- storeDataInLocalStorage,
29
- } from '../../utilities/localStorage';
30
- import { decryptBikData } from '../../utilities/encryption';
31
- import useIsMobile from '../../hooks/useIsMobile';
32
- import { useTriggeredIntentDetails } from '../../hooks/useTriggeredIntentDetails';
33
- import {
34
- TRIGGERED_INTENT_SOURCE,
35
- TRIGGERED_INTENT_TYPE,
36
- EXIT_INTENT_LEVEL,
37
- } from '@bikdotai/bik-models/dm/models/analytics';
38
- import { getTriggeredPageFromUrl } from '../utility';
39
- import { CUSTOM_FIELDS } from 'utilities/customFieldTypeMapping';
40
- import { LEAD_GENERATION_CHANNELS } from '../../types/customFields';
41
-
42
- const ExitIntentHook = React.lazy(() => import('../ExitIntentHook'));
43
-
44
- export interface IScratchCard extends WidgetSchema {
45
- environment: string;
46
- id: string;
47
- storeWidgetConfig: IPageConfigProcessed;
48
- preview?: boolean;
49
- isMobile?: boolean;
50
- }
51
-
52
- const ScratchCardWidget = (props: IScratchCard) => {
53
- const [showFab, setShowFab] = useState(false);
54
- const [showUserDetails, setShowUserDetails] = useState(false);
55
- const { mandatoryOption, optionalOptions } =
56
- props.leadGeneration as ISTWWidgetLeadGeneration;
57
- const { storeId, templateId } = props.info as WidgetInfo;
58
- const { discountTitle } =
59
- props.widgetCustomisation as ISTCWidgetCustomisation;
60
- const [isLoading, setIsLoading] = useState<boolean>(false);
61
- const [error, setError] = useState<string>(null);
62
- const [showWinningScreen, setShowWinningScreen] = useState(false);
63
- const [couponCodeDetails, setCouponCodeDetails] = useState<{
64
- code: string;
65
- description: string;
66
- }>({
67
- code: 'SND20OFF',
68
- description:
69
- '20% off on entire order | Minimum purchase of ₹500.00 One time use only | Expiry date : 5th Aug, 2022',
70
- });
71
- const [sameMobileNumberTooglers, setSameMobileNumberTogglers] = useState<{
72
- sameSMSNo: boolean;
73
- sameWhatsappNumber: boolean;
74
- }>({
75
- sameSMSNo: false,
76
- sameWhatsappNumber: false,
77
- });
78
- const widgetUtils = new WidgetUtils();
79
- const cookieUtils = new CookieUtils();
80
- const [showModal, setShowModal] = useState(false);
81
- const environment = props.environment;
82
- let buttonStyle: React.CSSProperties;
83
- const visibility = props.visibility as ISTWWidgetVisibility;
84
- const viewLimit =
85
- (visibility.triggers.frequency ? visibility.triggers.frequency : 0) / 24;
86
- const timeDelay =
87
- (visibility.triggers.timeDelay ? visibility.triggers.timeDelay : 0) * 1000;
88
- const pageScroll = visibility.triggers.pageScroll;
89
- const fabButtonVisibility = visibility.triggers.fabButtonVisibility;
90
- const isMobileDevice = useIsMobile();
91
- const { setTriggeredIntentDetails, getTriggeredIntentDetails } =
92
- useTriggeredIntentDetails(props.id);
93
-
94
- if (props.widgetCustomisation?.fabText) {
95
- buttonStyle = {
96
- width: 'fit-content',
97
- height: 'fit-content',
98
- paddingHorizontal: 4,
99
- borderRadius: 20,
100
- };
101
- }
102
-
103
- cookieUtils.addItemInLocalStorage('storeId', props.info?.storeId);
104
-
105
- const launchModalOnTimeDelay = () => {
106
- if (timeDelay && !showModal) {
107
- setTimeout(() => {
108
- setTriggeredIntentDetails({
109
- triggerSource: TRIGGERED_INTENT_SOURCE.AUTO_POPULATE,
110
- triggerType: TRIGGERED_INTENT_TYPE.TIME_DELAY,
111
- triggeredPage: getTriggeredPageFromUrl(window.location.href),
112
- });
113
- setCookie(`bik-${props.id}-modalopened`, 'bikmodalopened', viewLimit);
114
- setShowModal(true);
115
- }, timeDelay);
116
- }
117
- };
118
-
119
- const launchModalOnScroll = () => {
120
- const handleScrollEnd = () => {
121
- if (
122
- showModal ||
123
- (getCookie(`bik-${props.id}-claimed`) &&
124
- visibility?.triggers?.hideAfterClaimed) ||
125
- (getCookie(`bik-${props.id}-modalopened`) &&
126
- visibility?.triggers?.frequency)
127
- ) {
128
- return;
129
- }
130
- if (pageScroll && getScrollPercent() >= pageScroll) {
131
- setTriggeredIntentDetails({
132
- triggerSource: TRIGGERED_INTENT_SOURCE.AUTO_POPULATE,
133
- triggerType: TRIGGERED_INTENT_TYPE.PAGE_SCROLL,
134
- triggeredPage: getTriggeredPageFromUrl(window.location.href),
135
- });
136
- setCookie(`bik-${props.id}-modalopened`, 'bikmodalopened', viewLimit);
137
- setShowModal(true);
138
- }
139
- };
140
-
141
- window.addEventListener('scrollend', handleScrollEnd);
142
- return () => window.removeEventListener('scrollend', handleScrollEnd);
143
- };
144
- useEffect(() => {
145
- if (!props.preview) {
146
- cookieUtils.cookieClickHandler(
147
- `bik-${props.id}-visitor`,
148
- COOKIE_VALUES.BIK_VISITOR,
149
- EVENT_NAME.WIDGET_VISITED,
150
- 1,
151
- props.environment,
152
- props.id,
153
- );
154
-
155
- if (!fabButtonVisibility) {
156
- cookieUtils.cookieClickHandler(
157
- `bik-${props.id}-clicked`,
158
- 'bikclick',
159
- 'WIDGET_CLICKED',
160
- 1,
161
- props.environment,
162
- props.id,
163
- );
164
- }
165
-
166
- const shouldShow = widgetUtils.showWidget(
167
- {
168
- currentUrl: window.location.href.replace(window.location.origin, ''),
169
- customUrls: props.storeWidgetConfig,
170
- currentWidgetId: props.id,
171
- },
172
- props.info.isAutomationTesting,
173
- );
174
- if (
175
- !shouldShow ||
176
- (getCookie(`bik-${props.id}-claimed`) &&
177
- visibility?.triggers?.hideAfterClaimed) ||
178
- (getCookie(`bik-${props.id}-modalopened`) &&
179
- visibility?.triggers?.frequency)
180
- ) {
181
- return;
182
- }
183
- if (fabButtonVisibility && !getCookie(`bik-${props.id}-claimed`)) {
184
- setShowFab(true);
185
- }
186
- launchModalOnTimeDelay();
187
- const cleanupScrollListener = launchModalOnScroll();
188
-
189
- return () => {
190
- if (cleanupScrollListener) {
191
- cleanupScrollListener();
192
- }
193
- };
194
- }
195
- }, [window.location.href]);
196
-
197
- const handleExitIntent = (exitIntentType: string) => {
198
- if (!showModal) {
199
- setTriggeredIntentDetails({
200
- triggerSource: TRIGGERED_INTENT_SOURCE.EXIT_INTENT,
201
- triggerType: exitIntentType,
202
- triggeredPage: getTriggeredPageFromUrl(window.location.href),
203
- exitIntentLevel:
204
- visibility?.triggers?.showExitIntentOn ?? EXIT_INTENT_LEVEL.WEBPAGE,
205
- });
206
- setCookie(`bik-${props.id}-modalopened`, 'bikmodalopened', viewLimit);
207
- setShowModal(true);
208
- }
209
- };
210
-
211
- const getExitIntentHook = () => {
212
- if (props.preview) {
213
- return false;
214
- }
215
-
216
- const pathname = window.location.pathname;
217
- const location = window.location.href;
218
- const visiblePages = visibility?.visiblePages ?? [];
219
- const triggers = visibility?.triggers ?? {};
220
-
221
- if (
222
- shouldShowExitIntent({
223
- visiblePages,
224
- currentLocation: location,
225
- currentPathname: pathname,
226
- isMobileDevice,
227
- triggers,
228
- })
229
- ) {
230
- return (
231
- <Suspense fallback={null}>
232
- <ExitIntentHook
233
- onExitIntent={handleExitIntent}
234
- config={{
235
- exitIntentTimeDelay: triggers?.exitIntentTimeDelay,
236
- exitIntentViewLimit: triggers?.exitIntentViewLimit,
237
- exitIntentFastUpScroll: triggers?.exitIntentFastUpScroll,
238
- showExitIntentOn: triggers?.showExitIntentOn,
239
- }}
240
- widgetId={props.id}
241
- />
242
- </Suspense>
243
- );
244
- } else {
245
- return null;
246
- }
247
- };
248
-
249
- const fabStyle: IFab = {
250
- icon: <Send color={props.widgetCustomisation?.iconColor} />,
251
- onClick() {
252
- cookieUtils.cookieClickHandler(
253
- `bik-${props.id}-clicked`,
254
- 'bikclick',
255
- 'WIDGET_CLICKED',
256
- 1,
257
- props.environment,
258
- props.id,
259
- );
260
- setTriggeredIntentDetails({
261
- triggerSource: TRIGGERED_INTENT_SOURCE.FAB,
262
- triggerType: TRIGGERED_INTENT_TYPE.FAB_CLICK,
263
- triggeredPage: getTriggeredPageFromUrl(window.location.href),
264
- });
265
- setShowFab(false);
266
- setShowModal(true);
267
- },
268
- buttonStyle: buttonStyle,
269
- isMobile: props.isMobile,
270
- preview: props.preview ?? false,
271
- widgetCustomisation: {
272
- fabText: props.widgetCustomisation?.fabText,
273
- iconColor: props.widgetCustomisation?.iconColor,
274
- fabTransform: props.widgetCustomisation?.fabTransform,
275
- fabPositioner: props.widgetCustomisation?.fabPositioner,
276
- fabBackgroundColor: props.widgetCustomisation?.fabBackgroundColor,
277
- fabLottie: props.widgetCustomisation?.fabLottie,
278
- fabAnimationRun: props.widgetCustomisation?.fabAnimationRun,
279
- fabImage: props.widgetCustomisation?.fabImage,
280
- fabIconLink: props.widgetCustomisation?.fabIconLink,
281
- fabWebSize: props.widgetCustomisation?.fabWebSize,
282
- fabMobileSize: props.widgetCustomisation?.fabMobileSize,
283
- },
284
- };
285
-
286
- const claimPrizeHandle = async (userInputs: IUserInputs) => {
287
- let primaryPhoneNumber: string,
288
- secondaryPhoneNumber: string,
289
- emailId: string;
290
- const primaryInfo: IChannelInfo[] = [];
291
- const secondaryInfo: IChannelInfo[] = [];
292
- Object.keys(mandatoryOption).map(key => {
293
- if (mandatoryOption[key]) {
294
- if (key === CUSTOM_FIELDS) {
295
- const customFields = userInputs[key];
296
- Object.keys(customFields).forEach(fieldKey => {
297
- const fieldId = Number(fieldKey);
298
- const fieldValue = customFields[fieldKey];
299
- if (
300
- mandatoryOption.customFields &&
301
- Array.isArray(mandatoryOption.customFields) &&
302
- mandatoryOption.customFields.some(field => field.id === fieldId)
303
- ) {
304
- primaryInfo.push({
305
- channel: 'customField',
306
- value: fieldValue,
307
- customFieldId: fieldId,
308
- });
309
- }
310
- });
311
- } else {
312
- const value = userInputs[key].countryCodeData
313
- ? userInputs[key].countryCodeData.dial + userInputs[key].value
314
- : userInputs[key].value;
315
- let channel: LEAD_GENERATION_CHANNELS;
316
- if (key === 'isEmail') {
317
- channel = LEAD_GENERATION_CHANNELS.EMAIL;
318
- emailId = value;
319
- } else if (key === 'isSms') {
320
- channel = LEAD_GENERATION_CHANNELS.SMS;
321
- secondaryPhoneNumber = value;
322
- } else if (key === 'isWhatsapp') {
323
- channel = LEAD_GENERATION_CHANNELS.WHATSAPP;
324
- primaryPhoneNumber = value;
325
- }
326
- primaryInfo.push({
327
- channel: channel,
328
- value: value,
329
- });
330
- }
331
- }
332
- });
333
- sameMobileNumberTooglers.sameSMSNo
334
- ? (userInputs['isWhatsapp'] = {
335
- ...userInputs['isWhatsapp'],
336
- countryCodeData: userInputs['isSms'].countryCodeData,
337
- value: userInputs['isSms'].value,
338
- })
339
- : sameMobileNumberTooglers.sameWhatsappNumber
340
- ? (userInputs['isSms'] = {
341
- ...userInputs['isSms'],
342
- countryCodeData: userInputs['isWhatsapp'].countryCodeData,
343
- value: userInputs['isWhatsapp'].value,
344
- })
345
- : '';
346
-
347
- Object.keys(optionalOptions).map(key => {
348
- if (optionalOptions[key]) {
349
- if (key === CUSTOM_FIELDS) {
350
- const customFields = userInputs[key];
351
- Object.keys(customFields).forEach(fieldKey => {
352
- const fieldId = Number(fieldKey);
353
- const fieldValue = customFields[fieldKey];
354
- if (
355
- optionalOptions.customFields &&
356
- Array.isArray(optionalOptions.customFields) &&
357
- optionalOptions.customFields.some(field => field.id === fieldId)
358
- ) {
359
- secondaryInfo.push({
360
- channel: 'customField',
361
- value: fieldValue,
362
- customFieldId: fieldId,
363
- });
364
- }
365
- });
366
- } else {
367
- const value = userInputs[key].countryCodeData
368
- ? userInputs[key].countryCodeData.dial + userInputs[key].value
369
- : userInputs[key].value;
370
- let channel: LEAD_GENERATION_CHANNELS;
371
- if (key === 'isEmail') {
372
- channel = LEAD_GENERATION_CHANNELS.EMAIL;
373
- emailId = value;
374
- } else if (key === 'isSms') {
375
- channel = LEAD_GENERATION_CHANNELS.SMS;
376
- secondaryPhoneNumber = value;
377
- } else if (key === 'isWhatsapp') {
378
- channel = LEAD_GENERATION_CHANNELS.WHATSAPP;
379
- primaryPhoneNumber = value;
380
- }
381
- secondaryInfo.push({
382
- channel: channel,
383
- value: value,
384
- });
385
- }
386
- }
387
- });
388
- setIsLoading(true);
389
- let disbursedCoupon = undefined;
390
- if (primaryPhoneNumber) {
391
- disbursedCoupon = localStorage.getItem(
392
- `${LOCAL_STORAGE_KEYS.BIK_COUPON_DISBURSED}-${props.id}-${primaryPhoneNumber}`,
393
- );
394
- }
395
- if (!disbursedCoupon && secondaryPhoneNumber) {
396
- disbursedCoupon = localStorage.getItem(
397
- `${LOCAL_STORAGE_KEYS.BIK_COUPON_DISBURSED}-${props.id}-${secondaryPhoneNumber}`,
398
- );
399
- }
400
- if (!disbursedCoupon && emailId) {
401
- disbursedCoupon = localStorage.getItem(
402
- `${LOCAL_STORAGE_KEYS.BIK_COUPON_DISBURSED}-${props.id}-${emailId}`,
403
- );
404
- }
405
- if (disbursedCoupon) {
406
- const decryptedData = JSON.parse(decryptBikData(disbursedCoupon));
407
- setCouponCodeDetails({
408
- code: decryptedData.code,
409
- description: decryptedData.description,
410
- });
411
- setShowUserDetails(false);
412
- setShowWinningScreen(true);
413
- setIsLoading(false);
414
- return;
415
- }
416
-
417
- const triggeredIntentDetails = getTriggeredIntentDetails();
418
-
419
- const data: IPayloadFetchCouponCode = {
420
- storeId: storeId,
421
- widgetId: props.id,
422
- primaryInfo: primaryInfo,
423
- secondaryInfo: secondaryInfo,
424
- templateId: templateId,
425
- quadrant: 1,
426
- triggeredIntentDetails,
427
- };
428
- const response: any = await fetchCouponCode(data, environment);
429
- setIsLoading(false);
430
- if (response.status === 404) {
431
- if (response.error == 'Customer already exist!') {
432
- setError('Sorry, You already claimed the prize.');
433
- } else {
434
- setError(response.error);
435
- }
436
- }
437
- if (response.code && response.description) {
438
- storeDataInLocalStorage(
439
- LOCAL_STORAGE_KEYS.BIK_PHONE_NUMBER,
440
- primaryPhoneNumber,
441
- );
442
- storeDataInLocalStorage(LOCAL_STORAGE_KEYS.BIK_EMAIL, emailId);
443
- setCouponCodeDetails({
444
- code: response.code,
445
- description: response.description,
446
- });
447
- const stringifiedCouponData = JSON.stringify({
448
- code: response.code,
449
- description: response.description,
450
- });
451
- if (primaryPhoneNumber) {
452
- storeDataInLocalStorage(
453
- `${LOCAL_STORAGE_KEYS.BIK_COUPON_DISBURSED}-${props.id}-${primaryPhoneNumber}`,
454
- stringifiedCouponData,
455
- );
456
- }
457
- if (secondaryPhoneNumber) {
458
- storeDataInLocalStorage(
459
- `${LOCAL_STORAGE_KEYS.BIK_COUPON_DISBURSED}-${props.id}-${secondaryPhoneNumber}`,
460
- stringifiedCouponData,
461
- );
462
- }
463
- if (emailId) {
464
- storeDataInLocalStorage(
465
- `${LOCAL_STORAGE_KEYS.BIK_COUPON_DISBURSED}-${props.id}-${emailId}`,
466
- stringifiedCouponData,
467
- );
468
- }
469
- if (visibility.triggers.hideAfterClaimed) {
470
- setCookie(`bik-${props.id}-claimed`, response.code, 24820);
471
- }
472
- setShowUserDetails(false);
473
- setShowWinningScreen(true);
474
- }
475
- };
476
-
477
- return (
478
- <div id={`bik-widget-root-${props.id}`}>
479
- {getExitIntentHook()}
480
- {showFab && <Fab {...fabStyle} id={`bik-stw-${props.id}-fab`} />}
481
- {showUserDetails && (
482
- <UserDetails
483
- {...props}
484
- claimPrizeHandle={claimPrizeHandle}
485
- error={error}
486
- isLoading={isLoading}
487
- onCloseHandle={() => {
488
- setError(null);
489
- setShowFab(fabButtonVisibility);
490
- setShowUserDetails(false);
491
- }}
492
- widgetName={'Scratch_The_Card'}
493
- templateName={WIDGET_NAME.SCRATCH_THE_CARD}
494
- setSameMobileNumberTogglers={setSameMobileNumberTogglers}
495
- sameMobileNumberTogglers={sameMobileNumberTooglers}
496
- />
497
- )}
498
-
499
- {showWinningScreen && (
500
- <CouponDetails
501
- onCloseHandle={() => {
502
- setError(null);
503
- setShowWinningScreen(false);
504
- setShowFab(
505
- !!(
506
- fabButtonVisibility &&
507
- !getCookie(`bik-${props.id}-claimed`) &&
508
- visibility?.triggers?.hideAfterClaimed &&
509
- !getCookie(`bik-${props.id}-modalopened`) &&
510
- visibility?.triggers?.frequency
511
- ),
512
- );
513
- }}
514
- couponCodeDetails={couponCodeDetails}
515
- widgetCustomisation={props.widgetCustomisation}
516
- preview={props.preview}
517
- isMobile={props.isMobile}
518
- templateName={WIDGET_NAME.SCRATCH_THE_CARD}
519
- />
520
- )}
521
-
522
- <ScratchCardModal
523
- discountTitle={discountTitle}
524
- widgetCustomisation={props.widgetCustomisation}
525
- onScratchComplete={() => {
526
- setTimeout(() => {
527
- setShowModal(false);
528
- setShowUserDetails(true);
529
- }, 1500);
530
- }}
531
- showModal={showModal}
532
- environment={environment}
533
- onClose={() => {
534
- setShowModal(false);
535
- setShowFab(fabButtonVisibility);
536
- }}
537
- />
538
- </div>
539
- );
540
- };
541
-
542
- export default ScratchCardWidget;
543
-
544
- if (process.env.NODE_ENV !== 'development') {
545
- includeMe(ScratchCardWidget);
546
- }