@bikdotai/bik-widgets 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.
Files changed (206) hide show
  1. package/.eslintrc +22 -0
  2. package/.eslintrc.js +19 -0
  3. package/.github/workflows/main.yml +293 -0
  4. package/.prettierignore +13 -0
  5. package/.prettierrc +10 -0
  6. package/README.md +128 -0
  7. package/cypress/apiHelper/endpoints.ts +21 -0
  8. package/cypress/apiHelper/executor.ts +42 -0
  9. package/cypress/e2e/bottomDrawer.cy.ts +49 -0
  10. package/cypress/e2e/directReward.cy.ts +67 -0
  11. package/cypress/e2e/scratchTheCard.cy.ts +68 -0
  12. package/cypress/e2e/stw.cy.ts +82 -0
  13. package/cypress/e2e/waRedirection.cy.ts +46 -0
  14. package/cypress/fixtures/payloads.ts +330 -0
  15. package/cypress/support/commands.ts +37 -0
  16. package/cypress/support/e2e.ts +20 -0
  17. package/cypress.staging.config.ts +23 -0
  18. package/jsconfig.json +6 -0
  19. package/localtest.sh +10 -0
  20. package/log-server.js +86 -0
  21. package/package.json +79 -0
  22. package/postcss.config.js +8 -0
  23. package/src/Globals.d.ts +2 -0
  24. package/src/assets/lottie/santa.json +11722 -0
  25. package/src/assets/svg/CalendarClockIcon.tsx +30 -0
  26. package/src/assets/svg/CalendarIcon.tsx +24 -0
  27. package/src/assets/svg/CheckIcon.tsx +17 -0
  28. package/src/assets/svg/ChevronIcon.tsx +21 -0
  29. package/src/assets/svg/Close.tsx +39 -0
  30. package/src/assets/svg/Confetti.tsx +140 -0
  31. package/src/assets/svg/Copy.tsx +26 -0
  32. package/src/assets/svg/DropdownCheckIcon.tsx +35 -0
  33. package/src/assets/svg/ErrorIcon.tsx +27 -0
  34. package/src/assets/svg/RadioIcon.tsx +25 -0
  35. package/src/assets/svg/UncheckedCheckboxIcon.tsx +28 -0
  36. package/src/assets/svg/UncheckedRadioIcon.tsx +26 -0
  37. package/src/assets/svg/info.tsx +30 -0
  38. package/src/assets/svg/qrcode.svg +14 -0
  39. package/src/bootstrap.tsx +8 -0
  40. package/src/components/CtaCard/index.tsx +37 -0
  41. package/src/components/CtaCard/preview.module.css +32 -0
  42. package/src/components/CtaCard/style.module.css +32 -0
  43. package/src/components/EmailInput/emailInputBox.tsx +95 -0
  44. package/src/components/Fab/index.tsx +224 -0
  45. package/src/components/Fab/preview.module.css +28 -0
  46. package/src/components/Fab/style.module.css +37 -0
  47. package/src/components/Icons/Call.tsx +26 -0
  48. package/src/components/Icons/Cross.tsx +24 -0
  49. package/src/components/Icons/Gmail.tsx +61 -0
  50. package/src/components/Icons/Instagram.tsx +60 -0
  51. package/src/components/Icons/LiveChat.tsx +43 -0
  52. package/src/components/Icons/Messenger.tsx +57 -0
  53. package/src/components/Icons/Send.tsx +22 -0
  54. package/src/components/Icons/Whatsapp.tsx +24 -0
  55. package/src/components/Shimmer/index.tsx +12 -0
  56. package/src/components/Shimmer/style.module.css +37 -0
  57. package/src/components/SmsInput/smsInputBox.tsx +135 -0
  58. package/src/components/UserDetailsV2/userDetailsV2.desktop.module.css +52 -0
  59. package/src/components/UserDetailsV2/userDetailsV2.mobile.module.css +52 -0
  60. package/src/components/UserDetailsV2/userDetailsV2.module.css +81 -0
  61. package/src/components/UserDetailsV2/userDetailsV2.tsx +527 -0
  62. package/src/components/WhatsappInput/Spinner.tsx +26 -0
  63. package/src/components/WhatsappInput/whatsappInput.module.css +106 -0
  64. package/src/components/WhatsappInput/whatsappInputBox.tsx +155 -0
  65. package/src/components/WhatsappInput/whatsappInputPreviewDesktop.module.css +71 -0
  66. package/src/components/WhatsappInput/whatsappInputPreviewMobile.module.css +65 -0
  67. package/src/components/checkbox/checkbox.module.css +19 -0
  68. package/src/components/checkbox/checkbox.tsx +88 -0
  69. package/src/components/countryCodePicker/countriesDropdown.module.css +77 -0
  70. package/src/components/countryCodePicker/countriesDropdown.tsx +81 -0
  71. package/src/components/couponDetails/coupon.module.css +208 -0
  72. package/src/components/couponDetails/coupon.tsx +210 -0
  73. package/src/components/couponDetails/couponPreviewDesktop.module.css +158 -0
  74. package/src/components/couponDetails/couponPreviewMobile.module.css +164 -0
  75. package/src/components/index.ts +3 -0
  76. package/src/components/inputComponents/Checkbox.module.css +197 -0
  77. package/src/components/inputComponents/Checkbox.tsx +85 -0
  78. package/src/components/inputComponents/DatePicker.module.css +565 -0
  79. package/src/components/inputComponents/DatePicker.tsx +278 -0
  80. package/src/components/inputComponents/Dropdown.module.css +796 -0
  81. package/src/components/inputComponents/Dropdown.tsx +630 -0
  82. package/src/components/inputComponents/InputBox.module.css +401 -0
  83. package/src/components/inputComponents/InputBox.tsx +209 -0
  84. package/src/components/selectedCountry/selectedCountry.module.css +76 -0
  85. package/src/components/selectedCountry/selectedCountry.tsx +76 -0
  86. package/src/components/selectedCountry/selectedCountryPreviewDesktop.module.css +56 -0
  87. package/src/components/selectedCountry/selectedCountryPreviewMobile.module.css +57 -0
  88. package/src/components/userDetailsForm/RenderCustomFields.tsx +333 -0
  89. package/src/components/userDetailsForm/userDetailsForm.tsx +675 -0
  90. package/src/hooks/index.ts +4 -0
  91. package/src/hooks/useExitIntent.ts +452 -0
  92. package/src/hooks/useIsMobile.tsx +21 -0
  93. package/src/hooks/useMessageEvent.ts +8 -0
  94. package/src/hooks/useTriggeredIntentDetails.ts +43 -0
  95. package/src/hooks/useUrlListerner.ts +30 -0
  96. package/src/hooks/useWebSocketLogger.ts +59 -0
  97. package/src/hooks/useWindowEvent.ts +8 -0
  98. package/src/icons/copyIcon.tsx +26 -0
  99. package/src/icons/crossIconDesktop.tsx +20 -0
  100. package/src/icons/crossIconMobile.tsx +20 -0
  101. package/src/index.html +30 -0
  102. package/src/index.ts +32 -0
  103. package/src/index.tsx +1 -0
  104. package/src/repo/widgetRepo.ts +21 -0
  105. package/src/types/customFields.ts +73 -0
  106. package/src/utilities/cookie.ts +70 -0
  107. package/src/utilities/customFieldTypeMapping.ts +67 -0
  108. package/src/utilities/customFieldValidation.ts +201 -0
  109. package/src/utilities/encryption.ts +21 -0
  110. package/src/utilities/exitIntentUtils.ts +31 -0
  111. package/src/utilities/global.css +11 -0
  112. package/src/utilities/languageUtilities.ts +235 -0
  113. package/src/utilities/localRunner.js +26 -0
  114. package/src/utilities/localRunner.ts +27 -0
  115. package/src/utilities/localStorage.ts +40 -0
  116. package/src/utilities/script.tsx +15 -0
  117. package/src/utilities/stringUtils.ts +5 -0
  118. package/src/utilities/styleUtils.ts +134 -0
  119. package/src/utilities/variables.ts +11 -0
  120. package/src/utilities/widgetUtils.js +342 -0
  121. package/src/utilities/widgetUtils.ts +313 -0
  122. package/src/widgets/BottomDrawer/config.ts +41 -0
  123. package/src/widgets/BottomDrawer/index.tsx +116 -0
  124. package/src/widgets/BottomDrawer/modal.tsx +286 -0
  125. package/src/widgets/BottomDrawer/preview.module.css +122 -0
  126. package/src/widgets/BottomDrawer/previewMobile.module.css +124 -0
  127. package/src/widgets/BottomDrawer/style.module.css +279 -0
  128. package/src/widgets/CaptivateBanner/captivateBanner.tsx +200 -0
  129. package/src/widgets/CaptivateBanner/config.ts +72 -0
  130. package/src/widgets/CaptivateBanner/index.tsx +204 -0
  131. package/src/widgets/CaptivateBanner/previewDesktop.module.css +51 -0
  132. package/src/widgets/CaptivateBanner/previewMobile.module.css +51 -0
  133. package/src/widgets/CaptivateBanner/style.module.css +77 -0
  134. package/src/widgets/CaptivateBanner/utils.ts +104 -0
  135. package/src/widgets/CentrallyAlignedPopup/config.ts +42 -0
  136. package/src/widgets/CentrallyAlignedPopup/index.tsx +109 -0
  137. package/src/widgets/CentrallyAlignedPopup/modal.tsx +269 -0
  138. package/src/widgets/CentrallyAlignedPopup/preview.module.css +153 -0
  139. package/src/widgets/CentrallyAlignedPopup/previewMobile.module.css +153 -0
  140. package/src/widgets/CentrallyAlignedPopup/style.module.css +283 -0
  141. package/src/widgets/DirectReward/components/couponDetails.tsx +265 -0
  142. package/src/widgets/DirectReward/components/userDetails.tsx +117 -0
  143. package/src/widgets/DirectReward/config.ts +186 -0
  144. package/src/widgets/DirectReward/directReward.tsx +350 -0
  145. package/src/widgets/DirectReward/index.tsx +579 -0
  146. package/src/widgets/DirectReward/previewStyles/thankYouPreviewDesktop.module.css +276 -0
  147. package/src/widgets/DirectReward/previewStyles/thankYouPreviewMobile.module.css +303 -0
  148. package/src/widgets/DirectReward/previewStyles/userDetailsPreviewDesktop.module.css +511 -0
  149. package/src/widgets/DirectReward/previewStyles/userDetailsPreviewMobile.module.css +462 -0
  150. package/src/widgets/DirectReward/style.module.css +836 -0
  151. package/src/widgets/ExitIntentHook.tsx +28 -0
  152. package/src/widgets/STW/api.ts +70 -0
  153. package/src/widgets/STW/components/svgFactory.tsx +44 -0
  154. package/src/widgets/STW/config.ts +193 -0
  155. package/src/widgets/STW/context.ts +7 -0
  156. package/src/widgets/STW/couponDetails.tsx +121 -0
  157. package/src/widgets/STW/index.tsx +733 -0
  158. package/src/widgets/STW/previewStyles/thankyouPreviewDesktop.module.css +215 -0
  159. package/src/widgets/STW/previewStyles/thankyouPreviewMobile.module.css +205 -0
  160. package/src/widgets/STW/previewStyles/userInputsPreviewDesktop.module.css +732 -0
  161. package/src/widgets/STW/previewStyles/userInputsPreviewMobile.module.css +661 -0
  162. package/src/widgets/STW/previewStyles/wheelPreviewDesktop.module.css +498 -0
  163. package/src/widgets/STW/previewStyles/wheelPreviewMobile.module.css +497 -0
  164. package/src/widgets/STW/stw1.tsx +119 -0
  165. package/src/widgets/STW/stw2Components/wheelDesign.tsx +183 -0
  166. package/src/widgets/STW/stw2Pages/couponDetails.tsx +72 -0
  167. package/src/widgets/STW/stw2Pages/stw2.tsx +212 -0
  168. package/src/widgets/STW/stw2Pages/style.module.css +1226 -0
  169. package/src/widgets/STW/stw2Pages/userDetails.tsx +86 -0
  170. package/src/widgets/STW/stw2Pages/wheel.tsx +117 -0
  171. package/src/widgets/STW/stw2PreviewStyles/thankyouPreviewDesktop.module.css +835 -0
  172. package/src/widgets/STW/stw2PreviewStyles/thankyouPreviewMobile.module.css +787 -0
  173. package/src/widgets/STW/stw2PreviewStyles/userInputsPreviewDesktop.module.css +867 -0
  174. package/src/widgets/STW/stw2PreviewStyles/userInputsPreviewMobile.module.css +798 -0
  175. package/src/widgets/STW/stw2PreviewStyles/wheelPreviewDesktop.module.css +572 -0
  176. package/src/widgets/STW/stw2PreviewStyles/wheelPreviewMobile.module.css +559 -0
  177. package/src/widgets/STW/style.module.css +901 -0
  178. package/src/widgets/STW/userDetails.tsx +150 -0
  179. package/src/widgets/STW/utility.ts +664 -0
  180. package/src/widgets/STW/wheel.tsx +304 -0
  181. package/src/widgets/ScratchCard/ScratchOff/scratchOff.tsx +157 -0
  182. package/src/widgets/ScratchCard/config.ts +152 -0
  183. package/src/widgets/ScratchCard/globalStyle.module.css +931 -0
  184. package/src/widgets/ScratchCard/index.tsx +546 -0
  185. package/src/widgets/ScratchCard/modal.tsx +225 -0
  186. package/src/widgets/ScratchCard/preview.module.css +250 -0
  187. package/src/widgets/ScratchCard/previewMobile.module.css +247 -0
  188. package/src/widgets/ScratchCard/previewStyles/userDetailsPreviewDesktop.module.css +537 -0
  189. package/src/widgets/ScratchCard/previewStyles/userDetailsPreviewMobile.module.css +463 -0
  190. package/src/widgets/ScratchCard/style.module.css +220 -0
  191. package/src/widgets/ShopifyForm/config.ts +168 -0
  192. package/src/widgets/ShopifyForm/index.tsx +214 -0
  193. package/src/widgets/ShopifyForm/previewDesktop.module.css +117 -0
  194. package/src/widgets/ShopifyForm/previewMobile.module.css +131 -0
  195. package/src/widgets/ShopifyForm/shopifyForm.tsx +445 -0
  196. package/src/widgets/ShopifyForm/style.module.css +161 -0
  197. package/src/widgets/SingleButtonRedirection/config.ts +47 -0
  198. package/src/widgets/SingleButtonRedirection/index.tsx +121 -0
  199. package/src/widgets/WebStories/config.ts +105 -0
  200. package/src/widgets/WebStories/index.css +3 -0
  201. package/src/widgets/WebStories/index.tsx +282 -0
  202. package/src/widgets/WebStories/style.module.css +26 -0
  203. package/src/widgets/index.tsx +3 -0
  204. package/src/widgets/utility.ts +31 -0
  205. package/tsconfig.json +12 -0
  206. package/webpack.config.js +239 -0
@@ -0,0 +1,68 @@
1
+ import {
2
+ GetCouponRequest,
3
+ GetEventRequest,
4
+ GetVendorSrc,
5
+ GetWidgetSrc,
6
+ } from '../apiHelper/endpoints';
7
+
8
+ describe('STC e2e', () => {
9
+ it.skip('should make an API call, open a URL, and perform frontend testing', () => {
10
+ let apiCalled = false;
11
+ let fetchedCoupon = false;
12
+ const widgetId = 'lUoFe9aqnMrFi0zwb5cQ';
13
+ const templateId = 'vmgE8jBJJpThIeg9pK4a';
14
+ cy.intercept('POST', GetEventRequest(), req => {
15
+ apiCalled = true;
16
+ req.continue();
17
+ }).as('apiCall');
18
+ cy.intercept('POST', GetCouponRequest(), req => {
19
+ fetchedCoupon = true;
20
+ req.continue();
21
+ }).as('fetchCouponCall');
22
+ cy.visit(Cypress.env('storeUrl'));
23
+ cy.get(`script[src^="${GetVendorSrc()}"]`, { timeout: 10000 }).should(
24
+ 'exist',
25
+ );
26
+ cy.get(`script[src^="${GetWidgetSrc(widgetId, templateId)}"]`, {
27
+ timeout: 10000,
28
+ }).should('exist');
29
+ cy.get(`div[id="bik-widget-wrapper-${widgetId}"]`).should('exist');
30
+ cy.wrap(null).should(() => {
31
+ expect(apiCalled).to.be.true;
32
+ });
33
+ cy.get(`div[id="bik-widget-root-${widgetId}"]`).should('exist');
34
+ cy.get(`div[id="bik-widget-root-${widgetId}"]`).find('button').click();
35
+ cy.get(`div[class="ScratchCard__Container"]`, { timeout: 10000 }).should(
36
+ 'exist',
37
+ );
38
+ cy.get(`canvas[class="ScratchCard__Canvas"]`, { timeout: 10000 }).should(
39
+ 'exist',
40
+ );
41
+ cy.get(`canvas[class="ScratchCard__Canvas"]`).then($div => {
42
+ const { left, top, width, height } = $div[0].getBoundingClientRect();
43
+ const centerX = left + width / 2;
44
+ const centerY = top + height / 2;
45
+ cy.get(`canvas[class="ScratchCard__Canvas"]`)
46
+ .trigger('mousedown')
47
+ .trigger('mousemove', {
48
+ clientX: centerX + 100,
49
+ clientY: centerY + 100,
50
+ }) // Move the mouse 50 pixels to the right and down
51
+ .trigger('mouseup');
52
+ });
53
+ cy.get(`input[id="bik-${widgetId}-input-whatsapp"]`, {
54
+ timeout: 10000,
55
+ }).should('exist');
56
+ cy.get(`input[id="bik-${widgetId}-input-whatsapp"]`).type('7358264637');
57
+ cy.get(`div[id="bik-stw-${widgetId}-user-details-container"]`)
58
+ .find('button')
59
+ .click();
60
+ cy.wait(2000);
61
+ cy.wrap(null).should(() => {
62
+ expect(fetchedCoupon).to.be.true;
63
+ });
64
+ cy.get(`div[id="bik-${widgetId}-coupon-screen"]`, {
65
+ timeout: 10000,
66
+ }).should('exist');
67
+ });
68
+ });
@@ -0,0 +1,82 @@
1
+ import {
2
+ getBaseUrl,
3
+ GetCouponRequest,
4
+ GetEventRequest,
5
+ GetVendorSrc,
6
+ GetWidgetSrc,
7
+ } from '../apiHelper/endpoints';
8
+ import ApiRequest from '../apiHelper/executor';
9
+ import { STW_PAYLOAD } from '../fixtures/payloads';
10
+
11
+ describe('STW e2e', () => {
12
+ it('should make an API call, open a URL, and perform frontend testing', async () => {
13
+ new ApiRequest()
14
+ .post('/utilApiFunctions-deleteAllWidgets', {
15
+ password: 'sn@1234@A',
16
+ })
17
+ .then(response => {
18
+ expect(response.status).to.eq(200);
19
+ new ApiRequest()
20
+ .post('/widgetInfraApiFunctions-publishWidget', STW_PAYLOAD)
21
+ .then(response => {
22
+ expect(response.status).to.eq(200);
23
+ expect(response.body).to.have.property('widgetId');
24
+ let apiCalled = false;
25
+ let fetchProbabilityCalled = false;
26
+ let fetchedCoupon = false;
27
+ const widgetId = response.body.widgetId;
28
+ const templateId = 'KHnL25g05yRTFCGyJFit';
29
+ cy.intercept('POST', GetEventRequest(), req => {
30
+ apiCalled = true;
31
+ req.continue();
32
+ }).as('apiCall');
33
+ cy.intercept(
34
+ 'POST',
35
+ `${getBaseUrl('dm')}/publicApiFunctions-fetchProbabilityIndex`,
36
+ req => {
37
+ fetchProbabilityCalled = true;
38
+ req.continue();
39
+ },
40
+ ).as('fetchProbability');
41
+ cy.intercept('POST', GetCouponRequest(), req => {
42
+ fetchedCoupon = true;
43
+ req.continue();
44
+ }).as('fetchCouponCall');
45
+ cy.visit(Cypress.env('storeUrl'));
46
+ cy.get(`script[src^="${GetVendorSrc()}"]`, {
47
+ timeout: 10000,
48
+ }).should('exist');
49
+ cy.get(
50
+ `script[src^="${GetWidgetSrc(widgetId, templateId)}"]`,
51
+ ).should('exist');
52
+ cy.get(`div[id="bik-widget-wrapper-${widgetId}"]`).should('exist');
53
+ cy.wrap(null).should(() => {
54
+ expect(apiCalled).to.be.true;
55
+ });
56
+ cy.get(`button[id="bik-stw-${widgetId}-fab"]`).should('exist');
57
+ cy.get(`button[id="bik-stw-${widgetId}-fab"]`).click();
58
+ cy.get(`div[id="spin"]`).should('exist');
59
+ cy.get(`div[id="spin"]`).click();
60
+ cy.wrap(null).should(() => {
61
+ expect(fetchProbabilityCalled).to.be.true;
62
+ });
63
+ cy.get(`input[id="bik-${widgetId}-input-whatsapp"]`, {
64
+ timeout: 10000,
65
+ }).should('exist');
66
+ cy.get(`input[id="bik-${widgetId}-input-whatsapp"]`).type(
67
+ '7358264637',
68
+ );
69
+ cy.get(`div[id="bik-stw-${widgetId}-user-details-container"]`)
70
+ .find('button')
71
+ .click();
72
+ cy.wait(2000);
73
+ cy.wrap(null).should(() => {
74
+ expect(fetchedCoupon).to.be.true;
75
+ });
76
+ cy.get(`div[id="bik-${widgetId}-coupon-screen"]`, {
77
+ timeout: 10000,
78
+ }).should('exist');
79
+ });
80
+ });
81
+ });
82
+ });
@@ -0,0 +1,46 @@
1
+ import {
2
+ GetEventRequest,
3
+ GetVendorSrc,
4
+ GetWidgetSrc,
5
+ } from '../apiHelper/endpoints';
6
+ import { WA_WIDGET_PAYLOAD } from '../fixtures/payloads';
7
+ import ApiRequest from '../apiHelper/executor';
8
+
9
+ describe('Whatsapp Redirection e2e', () => {
10
+ it('should make an API call, open a URL, and perform frontend testing', () => {
11
+ new ApiRequest()
12
+ .post('/utilApiFunctions-deleteAllWidgets', {
13
+ password: 'sn@1234@A',
14
+ })
15
+ .then(() => {
16
+ new ApiRequest()
17
+ .post('/widgetInfraApiFunctions-publishWidget', WA_WIDGET_PAYLOAD)
18
+ .then(response => {
19
+ let apiCalled = false;
20
+ cy.intercept('POST', GetEventRequest(), req => {
21
+ apiCalled = true;
22
+ req.continue();
23
+ }).as('apiCall');
24
+ expect(response.status).to.eq(200);
25
+ expect(response.body).to.have.property('widgetId');
26
+ const widgetId = response.body.widgetId;
27
+ const templateId = '1ocTg6N2ARGZTN00EgCd';
28
+ cy.visit(Cypress.env('storeUrl'));
29
+ cy.get(`script[src^="${GetVendorSrc()}"]`, {
30
+ timeout: 10000,
31
+ }).should('exist');
32
+ cy.get(
33
+ `script[src^="${GetWidgetSrc(widgetId, templateId)}"]`,
34
+ ).should('exist');
35
+ cy.get(`div[id="bik-widget-wrapper-${widgetId}"]`).should('exist');
36
+ cy.wrap(null).should(() => {
37
+ expect(apiCalled).to.be.true;
38
+ });
39
+ cy.get(`div[id="bik-widget-root-${widgetId}"]`).should('exist');
40
+ cy.get(`div[id="bik-widget-root-${widgetId}"]`)
41
+ .find('button')
42
+ .click();
43
+ });
44
+ });
45
+ });
46
+ });
@@ -0,0 +1,330 @@
1
+ export const WA_WIDGET_PAYLOAD = {
2
+ content: {
3
+ widgetCustomisation: {
4
+ fabBackgroundColor: '#25D366',
5
+ whatsapp: '918825358636',
6
+ whatsappMessage:
7
+ 'Hello ! I was browsing through your website and wanted to know more about your products',
8
+ fabPosition: 'BOTTOM_RIGHT',
9
+ widgetName: 'Whatsapp redirection l8qjh',
10
+ fabWebSize: 50,
11
+ iconColor: '#ffffff',
12
+ fabIconLink:
13
+ 'https://storage.googleapis.com/bik-widget-mfe/bap%2Ffab-assets%2Ficons%2Fbik%2Fwhatsapp.svg',
14
+ fabText: 'Buy now',
15
+ text: 'Shop now',
16
+ fabMobileSize: 50,
17
+ fabPositioner: {
18
+ bottom: '30px',
19
+ right: '30px',
20
+ },
21
+ },
22
+ visibility: {
23
+ visiblePages: ['/*'],
24
+ },
25
+ leadGeneration: {
26
+ chatUrl:
27
+ 'https://api.whatsapp.com/send?phone=918825358636&text=Hello%20!%20I%20was%20browsing%20through%20your%20website%20and%20wanted%20to%20know%20more%20about%20your%20products%0AInquiry%20id%20%3A%20%2307bb99%20',
28
+ },
29
+ info: {
30
+ widgetTypeId: 'UXq0MWMp765My76Fk7p5',
31
+ templateName: 'Whatsapp redirection',
32
+ infra: '2.0',
33
+ storeId: 'kNwEVoGlLpVjOsXoO1M8WgvWicP2',
34
+ templateId: '1ocTg6N2ARGZTN00EgCd',
35
+ isAutomationTesting: true,
36
+ },
37
+ },
38
+ };
39
+
40
+ export const DIRECT_REWARD_PAYLOAD = {
41
+ content: {
42
+ widgetCustomisation: {
43
+ postPlayScreenButtonColour: '#000000',
44
+ postPlayScreenTitleSize: 26,
45
+ postPlayScreenCouponBgColour: '#e8e8e8',
46
+ fabPosition: 'POP_UP',
47
+ widgetName: 'Direct reward widget 6ssn',
48
+ playScreenImageMobile:
49
+ 'https://firebasestorage.googleapis.com/v0/b/staging-bikayi.appspot.com/o/image_kNwEVoGlLpVjOsXoO1M8WgvWicP2_pqOFu.jpg?alt=media&token=968c36e7-843f-4ae4-8230-d695bd49c35f',
50
+ postPlayScreenSubTitle: '<p>You have become a part of our family</p>',
51
+ playScreenSubTitle: '<p>You have won 50% off discount code</p>',
52
+ postPlayScreenTitle: '<p><strong>Congratulations!</strong></p>',
53
+ fontFamily: {
54
+ link: 'https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap',
55
+ name: 'Montserrat',
56
+ },
57
+ postPlayScreenImageDesktop:
58
+ 'https://firebasestorage.googleapis.com/v0/b/staging-bikayi.appspot.com/o/image_kNwEVoGlLpVjOsXoO1M8WgvWicP2_huHcI.jpg?alt=media&token=56e52885-5b8e-49fd-acf8-fc5669166407',
59
+ playScreenImageDesktop:
60
+ 'https://firebasestorage.googleapis.com/v0/b/staging-bikayi.appspot.com/o/image_kNwEVoGlLpVjOsXoO1M8WgvWicP2_huHcI.jpg?alt=media&token=56e52885-5b8e-49fd-acf8-fc5669166407',
61
+ playScreenTitle: '<p><strong>Hey Good Looking!</strong></p>',
62
+ cardTheme: '#e8e8e8',
63
+ postPlayScreenButtonText: 'Copy and use discount',
64
+ playScreenFormDescriptionSize: 12,
65
+ playScreenSubTitleSize: 16,
66
+ postPlayScreenButtonTextColour: '#ffffff',
67
+ playScreenTitleSize: 26,
68
+ playScreenButtonTextColour: '#ffffff',
69
+ postPlayScreenSubTitleSize: 16,
70
+ postPlayScreenImageMobile:
71
+ 'https://firebasestorage.googleapis.com/v0/b/staging-bikayi.appspot.com/o/image_kNwEVoGlLpVjOsXoO1M8WgvWicP2_pqOFu.jpg?alt=media&token=968c36e7-843f-4ae4-8230-d695bd49c35f',
72
+ playScreenButtonText: 'Claim the prize',
73
+ postPlayScreenCouponBorderColour: '#000000',
74
+ playScreenButtonColour: '#000000',
75
+ },
76
+ visibility: {
77
+ visiblePages: ['/*'],
78
+ triggers: {
79
+ isPlayable: false,
80
+ playLimit: null,
81
+ hasFAbButton: true,
82
+ pageScroll: null,
83
+ timeDelay: 3,
84
+ viewLimit: null,
85
+ fabButtonVisibility: true,
86
+ frequency: null,
87
+ },
88
+ },
89
+ leadGeneration: {
90
+ optionalOptions: {
91
+ isSms: false,
92
+ isWhatsapp: false,
93
+ isEmail: false,
94
+ },
95
+ mandatoryOption: {
96
+ isSms: false,
97
+ isWhatsapp: true,
98
+ isEmail: false,
99
+ },
100
+ enableConsentPolicies: false,
101
+ privacyPolicyURL: '',
102
+ },
103
+ info: {
104
+ widgetTypeId: 'lCcPfO2RuooXpBGgZSs0',
105
+ templateName: 'Direct reward widget',
106
+ infra: '2.0',
107
+ storeId: 'kNwEVoGlLpVjOsXoO1M8WgvWicP2',
108
+ templateId: '7fM9X24TY9Bk9f7fIG9C',
109
+ isAutomationTesting: true,
110
+ },
111
+ },
112
+ coupons: [
113
+ {
114
+ minAmount: null,
115
+ isStaticCoupon: true,
116
+ minQuantity: null,
117
+ quadrant: 1,
118
+ widgetId: 'fAC5VwVF3T3WISirb2yX',
119
+ description: 'sdfsdfsdfsdsdfsdf',
120
+ targetType: 'lineItem',
121
+ expireAfter: null,
122
+ storeId: 'kNwEVoGlLpVjOsXoO1M8WgvWicP2',
123
+ couponCode: 'jssfs',
124
+ targetSelection: 'all',
125
+ id: 'hdalV3IwcakJUG9wvVs7',
126
+ minPurchaseReq: 'na',
127
+ },
128
+ ],
129
+ };
130
+
131
+ export const BOTTOM_DRAWER_PAYLOAD = {
132
+ content: {
133
+ widgetCustomisation: {
134
+ whatsapp: '918825358636',
135
+ widgetName: 'Bottom Drawer 3yhp',
136
+ fabPosition: 'CENTER_RIGHT',
137
+ emailBody: 'sdfsdfdsf',
138
+ fabWebSize: 50,
139
+ redirectWidgetBannerImage:
140
+ 'https://png.pngtree.com/thumb_back/fh260/back_pic/02/50/63/71577e1cf59d802.jpg',
141
+ instagram: 'gram_insta_monster',
142
+ redirectWidgetTitleText: 'Connect with us!',
143
+ emailSubject: 'dfsdfsd',
144
+ fabPositioner: {
145
+ bottom: '50%',
146
+ right: 10,
147
+ },
148
+ fabBackgroundColor: '#FBDC7E',
149
+ redirectWidgetBackgroundColor: '',
150
+ whatsappMessage: 'hi',
151
+ livechatEnabled: false,
152
+ iconColor: '#000000',
153
+ fabTransform: 'translate(0, 0px)',
154
+ fabIconLink:
155
+ 'https://storage.googleapis.com/bik-widget-mfe/bap%2Ffab-assets%2Ficons%2Fbik%2Fredirect.svg',
156
+ fabMobileSize: 50,
157
+ email: 'dummybik@gmail.com',
158
+ },
159
+ visibility: {
160
+ visiblePages: ['/*'],
161
+ },
162
+ leadGeneration: {
163
+ mandatoryOption: {
164
+ isEmail: false,
165
+ isSms: false,
166
+ isWhatsapp: true,
167
+ },
168
+ optionalOptions: {
169
+ isEmail: false,
170
+ isSms: false,
171
+ isWhatsapp: false,
172
+ },
173
+ enableConsentPolicies: false,
174
+ privacyPolicyURL: '',
175
+ chatFlowId: '',
176
+ },
177
+ info: {
178
+ widgetTypeId: 'UXq0MWMp765My76Fk7p5',
179
+ templateName: 'Bottom Drawer',
180
+ infra: '2.0',
181
+ storeId: 'kNwEVoGlLpVjOsXoO1M8WgvWicP2',
182
+ templateId: 'P29OopljI3TkkYdfxJE0',
183
+ isAutomationTesting: true,
184
+ },
185
+ },
186
+ };
187
+
188
+ export const STW_PAYLOAD = {
189
+ content: {
190
+ widgetCustomisation: {
191
+ postPlayScreenButtonColour: '#000000',
192
+ winningScreenButtonText: 'Copy and use discount',
193
+ fabPosition: 'BOTTOM_LEFT',
194
+ widgetName: 'Spin the wheel popup cdr2',
195
+ winningScreenCouponBgColour: '#ffffff',
196
+ winningScreenButtonColour: '#000000',
197
+ fontLinks: [],
198
+ postSpinScreenCtaColor: '#731dcf',
199
+ fabPositioner: {
200
+ left: '30px',
201
+ bottom: '30px',
202
+ },
203
+ fabColor: '#ffffff',
204
+ playScreenHeading:
205
+ '<p><strong>Spin the wheel to win exciting prizes</strong></p>',
206
+ fabBackgroundColor: '#d97559',
207
+ postPlayScreenSubTitle: '<p>To claim prize fill the details below</p>',
208
+ playScreenSubheadingFont: 'Inter',
209
+ postPlayScreenTitle:
210
+ '<p><strong>Special prize only for you!</strong></p>',
211
+ winningScreenIcon: '',
212
+ postPlayScreenButtonTextFont: 'Inter',
213
+ segmentAngle: 60,
214
+ couponFont: 'Inter',
215
+ playScreenBackgroundColour: '#ffffff',
216
+ playScreenSubHeading:
217
+ '<p>You have a chance to win a big discount. Are you ready?</p>',
218
+ spinLimit: 0,
219
+ discountCodeTitle: {
220
+ '1': 'sdfdfs',
221
+ '2': 'sdfdsfsd',
222
+ '3': 'asdas',
223
+ '4': 'asdassa',
224
+ },
225
+ playScreenHeadingFont: 'Inter',
226
+ fabMobileSize: 50,
227
+ winningScreenCouponTextColour: '#000000',
228
+ winningScreenButtonTextFont: 'Inter',
229
+ iconcolor: '#f5f5f5',
230
+ wheelDetails: [],
231
+ winningScreenButtonTextColour: '#ffffff',
232
+ postPlayScreenButtonText: 'Claim prize',
233
+ spikesCount: 4,
234
+ fabWebSize: '50',
235
+ winningScreenSubTitle: '<p>You have a chance to win a big discount</p>',
236
+ winningScreenFont: 'Inter',
237
+ postPlayScreenButtonTextColour: '#ffffff',
238
+ spinnerColor: '#fbbb18',
239
+ segmentColor2: '#d97559',
240
+ segmentColor1: '#a1deed',
241
+ iconColor: '#f5f5f5',
242
+ fabIconLink:
243
+ 'https://storage.googleapis.com/bik-widget-mfe/bap%2Ffab-assets%2Ficons%2Fbik%2Fgift.svg',
244
+ postPlayScreenFont: 'Inter',
245
+ winningScreenTitle:
246
+ '<p><strong>Spin the wheel to win exciting prizes</strong></p>',
247
+ postPlayScreenBackgroundColour: '#ffffff',
248
+ winningScreenBackgroundColour: '#ffffff',
249
+ probability: {
250
+ probability: [0.25, 0.25, 0.25, 0.25],
251
+ probabilityIndexArray: [
252
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
253
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
254
+ 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
255
+ 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
256
+ 3, 3, 3, 3, 3, 3, 3, 3,
257
+ ],
258
+ },
259
+ },
260
+ visibility: {
261
+ visiblePages: ['/*'],
262
+ triggers: {
263
+ isPlayable: false,
264
+ playLimit: null,
265
+ hasFAbButton: true,
266
+ pageScroll: null,
267
+ timeDelay: null,
268
+ viewLimit: null,
269
+ fabButtonVisibility: true,
270
+ frequency: null,
271
+ },
272
+ },
273
+ leadGeneration: {
274
+ optionalOptions: {
275
+ isSms: false,
276
+ isWhatsapp: false,
277
+ isEmail: false,
278
+ },
279
+ mandatoryOption: {
280
+ isSms: false,
281
+ isWhatsapp: true,
282
+ isEmail: false,
283
+ },
284
+ enableConsentPolicies: false,
285
+ privacyPolicyURL: '',
286
+ },
287
+ info: {
288
+ widgetTypeId: 'lCcPfO2RuooXpBGgZSs0',
289
+ templateName: 'Spin the wheel popup',
290
+ infra: '2.0',
291
+ templateId: 'KHnL25g05yRTFCGyJFit',
292
+ storeId: 'kNwEVoGlLpVjOsXoO1M8WgvWicP2',
293
+ isAutomationTesting: true,
294
+ },
295
+ },
296
+ coupons: [
297
+ {
298
+ quadrant: 1,
299
+ couponCode: 'aadfada',
300
+ description: 'asdadsadas',
301
+ isStaticCoupon: true,
302
+ probability: 0.25,
303
+ title: 'sdfdfs',
304
+ },
305
+ {
306
+ quadrant: 2,
307
+ couponCode: 'asdasdas',
308
+ description: 'adfaasdasasda',
309
+ isStaticCoupon: true,
310
+ probability: 0.25,
311
+ title: 'sdfdsfsd',
312
+ },
313
+ {
314
+ quadrant: 3,
315
+ couponCode: 'asdadas',
316
+ description: 'asdasdadadasdas',
317
+ isStaticCoupon: true,
318
+ probability: 0.25,
319
+ title: 'asdas',
320
+ },
321
+ {
322
+ quadrant: 4,
323
+ couponCode: 'asdasd',
324
+ description: 'asdasdasdas',
325
+ isStaticCoupon: true,
326
+ probability: 0.25,
327
+ title: 'asdassa',
328
+ },
329
+ ],
330
+ };
@@ -0,0 +1,37 @@
1
+ /// <reference types="cypress" />
2
+ // ***********************************************
3
+ // This example commands.ts shows you how to
4
+ // create various custom commands and overwrite
5
+ // existing commands.
6
+ //
7
+ // For more comprehensive examples of custom
8
+ // commands please read more here:
9
+ // https://on.cypress.io/custom-commands
10
+ // ***********************************************
11
+ //
12
+ //
13
+ // -- This is a parent command --
14
+ // Cypress.Commands.add('login', (email, password) => { ... })
15
+ //
16
+ //
17
+ // -- This is a child command --
18
+ // Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
19
+ //
20
+ //
21
+ // -- This is a dual command --
22
+ // Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
23
+ //
24
+ //
25
+ // -- This will overwrite an existing command --
26
+ // Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
27
+ //
28
+ // declare global {
29
+ // namespace Cypress {
30
+ // interface Chainable {
31
+ // login(email: string, password: string): Chainable<void>
32
+ // drag(subject: string, options?: Partial<TypeOptions>): Chainable<Element>
33
+ // dismiss(subject: string, options?: Partial<TypeOptions>): Chainable<Element>
34
+ // visit(originalFn: CommandOriginalFn, url: string, options: Partial<VisitOptions>): Chainable<Element>
35
+ // }
36
+ // }
37
+ // }
@@ -0,0 +1,20 @@
1
+ // ***********************************************************
2
+ // This example support/e2e.ts is processed and
3
+ // loaded automatically before your test files.
4
+ //
5
+ // This is a great place to put global configuration and
6
+ // behavior that modifies Cypress.
7
+ //
8
+ // You can change the location of this file or turn off
9
+ // automatically serving support files with the
10
+ // 'supportFile' configuration option.
11
+ //
12
+ // You can read more here:
13
+ // https://on.cypress.io/configuration
14
+ // ***********************************************************
15
+
16
+ // Import commands.js using ES2015 syntax:
17
+ import './commands';
18
+
19
+ // Alternatively you can use CommonJS syntax:
20
+ // require('./commands')
@@ -0,0 +1,23 @@
1
+ import { defineConfig } from 'cypress';
2
+
3
+ export default defineConfig({
4
+ env: {
5
+ isProd: false,
6
+ storeId: 'kNwEVoGlLpVjOsXoO1M8WgvWicP2',
7
+ storeUrl: 'https://shanya-testing.myshopify.com/',
8
+ accessToken: 'hO57TPNeiadpHf2G.PTtIsYFIi',
9
+ },
10
+ e2e: {},
11
+ reporter: 'mochawesome',
12
+ reporterOptions: {
13
+ reportDir: 'cypress/results',
14
+ overwrite: false,
15
+ html: false,
16
+ json: true,
17
+ inline: true,
18
+ quiet: false,
19
+ inlineAssets: true,
20
+ },
21
+ video: false,
22
+ screenshotOnRunFailure: false,
23
+ });
package/jsconfig.json ADDED
@@ -0,0 +1,6 @@
1
+ {
2
+ "compilerOptions": {
3
+ "baseUrl": "./src"
4
+ },
5
+ "include": ["src"]
6
+ }
package/localtest.sh ADDED
@@ -0,0 +1,10 @@
1
+ # build widgets
2
+ npm run build-widgets
3
+
4
+ # delete existing files from bucket
5
+ gsutil -m rm -r gs://bik-widget-mfe/bap/$1/*
6
+
7
+ # copy dist to bucket
8
+ gsutil -m cp -r dist/* gs://bik-widget-mfe/bap/$1
9
+
10
+ # inject scripts to store using script tag api