@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,168 +0,0 @@
1
- import {
2
- FAB_POSITION,
3
- STATUS,
4
- WIDGET_NAME,
5
- WIDGET_POSITION_DESKTOP,
6
- WIDGET_POSITION_MOBILE,
7
- } from '@bikdotai/bik-models/dm';
8
- import {
9
- IShopifyFormsLeadGeneration,
10
- IShopifyFormsWidgetCustomisation,
11
- } from '@bikdotai/bik-models/dm/widgets/ShopifyForms/shopifyForms.interface';
12
-
13
- export const SHOPIFY_FORM_CONFIG = {
14
- storeId: 'asf',
15
- id: 'widget',
16
- templateId: ' Z6LLItSwpTbNmobFvl6S',
17
- environment: 'staging',
18
- templateName: WIDGET_NAME.BACK_IN_STOCK_NOTIFIER,
19
- widgetCustomisation: {
20
- fabPosition: 'POP_UP',
21
- widgetName: 'Back in stock notifier be18l',
22
- backgroundColour: '#E6FEFF',
23
- fontColour: '#212121',
24
- fontFamily: {
25
- 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',
26
- name: 'Montserrat',
27
- },
28
- playScreenImage:
29
- 'https://firebasestorage.googleapis.com/v0/b/staging-bikayi.appspot.com/o/0b4e9493-9bb8-4e49-b39a-d1bd734ba0dd%23image_p60HYv5wjgQaOrPdqT5NjbpkroD2_Pntnt.jpg?alt=media&token=fb380dba-905a-449e-815c-353ddb6bca49',
30
- playScreenTitle: '<p>Notify me when in stock</p>',
31
- playScreenSubTitle:
32
- '<p>Provide your email for notifications once this item is back in stock</p>',
33
- playScreenButtonText: 'Email me when available',
34
- playScreenButtonColour: '#01A9AC',
35
- postPlayScreenImage:
36
- 'https://firebasestorage.googleapis.com/v0/b/staging-bikayi.appspot.com/o/0b4e9493-9bb8-4e49-b39a-d1bd734ba0dd%23image_p60HYv5wjgQaOrPdqT5NjbpkroD2_Pntnt.jpg?alt=media&token=fb380dba-905a-449e-815c-353ddb6bca49',
37
- playScreenButtonTextColour: '#ffffff',
38
- postPlayScreenTitle: '<p>Thank you</p>',
39
- postPlayScreenSubTitle:
40
- '<p>You will receive an email notification when this product becomes available</p>',
41
- postPlayScreenButtonColour: '#01A9AC',
42
- postPlayScreenButtonTextColour: '#ffffff',
43
- isRedirectionButtonEnabled: false,
44
- skipLabel: true,
45
- widgetPositionMobile: 'CENTER',
46
- widgetPositionDesktop: 'CENTER',
47
- postPlayScreenTitleIcon:
48
- 'https://storage.googleapis.com/bik-widget-mfe/bap/post-play-screen-assets/images/bik/checked.png',
49
- multiLingualConfigurations: {
50
- ENGLISH: {
51
- playScreenTitle: '<p>Notify me when in stock</p>',
52
- playScreenSubTitle:
53
- '<p>Provide your email for notifications once this item is back in stock</p>',
54
- playScreenButtonText: 'Email me when available',
55
- postPlayScreenTitle: '<p>Thank you</p>',
56
- postPlayScreenSubTitle:
57
- '<p>You will receive an email notification when this product becomes available</p>',
58
- postPlayScreenButtonText: 'Email me when available',
59
- },
60
- ARABIC: {
61
- playScreenTitle: '<p>أخبرني عند الوصول إلى المخزون</p>',
62
- playScreenSubTitle:
63
- '<p>قدم بريدك الإلكتروني للإشعارات بمجرد عودة هذا العنصر إلى المخزون</p>',
64
- playScreenButtonText: 'أرسل لي بريدًا إلكترونيًا عند التوفر',
65
- postPlayScreenTitle: '<p>شكرا لك</p>',
66
- postPlayScreenSubTitle:
67
- '<p>سوف تتلقى إشعارًا بالبريد الإلكتروني عند توفر هذا المنتج</p>',
68
- postPlayScreenButtonText: 'أرسل لي بريدًا إلكترونيًا عند التوفر',
69
- },
70
- FRENCH: {
71
- playScreenTitle: '<p>Prévenez-moi en stock</p>',
72
- playScreenSubTitle:
73
- '<p>Indiquez votre e-mail pour recevoir des notifications une fois cet article de retour en stock</p>',
74
- playScreenButtonText: 'Envoyez-moi un e-mail lorsque disponible',
75
- postPlayScreenTitle: '<p>Merci</p>',
76
- postPlayScreenSubTitle:
77
- '<p>Vous recevrez une notification par e-mail lorsque ce produit sera disponible</p>',
78
- postPlayScreenButtonText: 'Envoyez-moi un e-mail lorsque disponible',
79
- },
80
- SPANISH: {
81
- playScreenTitle: '<p>Notifícame cuando esté en stock</p>',
82
- playScreenSubTitle:
83
- '<p>Proporcione su correo electrónico para recibir notificaciones una vez que este artículo vuelva a estar en stock</p>',
84
- playScreenButtonText:
85
- 'Envíame un correo electrónico cuando esté disponible',
86
- postPlayScreenTitle: '<p>Gracias</p>',
87
- postPlayScreenSubTitle:
88
- '<p>Recibirá una notificación por correo electrónico cuando este producto esté disponible</p>',
89
- postPlayScreenButtonText:
90
- 'Envíame un correo electrónico cuando esté disponible',
91
- },
92
- MALAY: {
93
- playScreenTitle: '<p>Beritahu saya bila stok</p>',
94
- playScreenSubTitle:
95
- '<p>Masukkan e-mel anda untuk pemberitahuan sekiranya item ini kembali ke stok</p>',
96
- playScreenButtonText: 'E-mel saya apabila tersedia',
97
- postPlayScreenTitle: '<p>Terima kasih</p>',
98
- postPlayScreenSubTitle:
99
- '<p>Anda akan menerima pemberitahuan e-mel apabila produk ini tersedia</p>',
100
- postPlayScreenButtonText: 'E-mel saya apabila tersedia',
101
- },
102
- },
103
- } as IShopifyFormsWidgetCustomisation,
104
- leadGeneration: {
105
- mandatoryOption: {
106
- isEmail: false,
107
- isSms: false,
108
- isWhatsapp: true,
109
- customFields: [
110
- {
111
- id: 1001,
112
- storeId: 'shopify-store',
113
- fieldName: 'Product Interest',
114
- fieldType: 'single_line',
115
- options: [],
116
- },
117
- ],
118
- },
119
- optionalOptions: {
120
- isEmail: false,
121
- isSms: false,
122
- isWhatsapp: false,
123
- customFields: [
124
- {
125
- id: 1002,
126
- storeId: 'shopify-store',
127
- fieldName: 'How did you hear about us?',
128
- fieldType: 'dropdown',
129
- options: [
130
- 'Social Media',
131
- 'Search Engine',
132
- 'Friend Recommendation',
133
- 'Advertisement',
134
- ],
135
- },
136
- {
137
- id: 1003,
138
- storeId: 'shopify-store',
139
- fieldName: 'Subscribe to newsletter',
140
- fieldType: 'checkbox',
141
- options: [],
142
- },
143
- ],
144
- },
145
- enableConsentPolicies: true,
146
- privacyPolicyURL: '',
147
- } as IShopifyFormsLeadGeneration,
148
- info: {
149
- delete: false,
150
- liveSince: '',
151
- scriptPath: '',
152
- infra: '2.0',
153
- status: STATUS.DRAFT,
154
- storeId: '',
155
- templateId: ' Z6LLItSwpTbNmobFvl6S',
156
- widgetTypeId: 'lCcPfO2RuooXpBGgZSs0',
157
- templateName: WIDGET_NAME.BACK_IN_STOCK_NOTIFIER,
158
- id: 'widget',
159
- },
160
- storeWidgetConfig: {
161
- '/*': [
162
- {
163
- widgetId: 'widget',
164
- fabPosition: FAB_POSITION.POP_UP,
165
- },
166
- ],
167
- },
168
- };
@@ -1,214 +0,0 @@
1
- import includeMe from 'utilities/script';
2
- import Popup, { SCREENS } from './shopifyForm';
3
- import React, { useEffect, useRef, useState } from 'react';
4
- import {
5
- IShopifyFormsLeadGeneration,
6
- IShopifyFormsWidgetCustomisation,
7
- WIDGET_NAME,
8
- WidgetSchema,
9
- ISO_CODES_VALUES,
10
- LANGUAGE_VALUES,
11
- LANGUAGE_ISO_CODES,
12
- } from '@bikdotai/bik-models/dm';
13
- import { IPageConfigProcessed } from '../../utilities/widgetUtils';
14
- import { cookieClickHandler } from '../STW/utility';
15
- import { LanguageUtils } from 'utilities/languageUtilities';
16
-
17
- export interface ShopifyWidgetProps extends WidgetSchema {
18
- widgetCustomisation: IShopifyFormsWidgetCustomisation;
19
- leadGeneration: IShopifyFormsLeadGeneration;
20
- id: string;
21
- templateId: string;
22
- storeWidgetConfig: IPageConfigProcessed;
23
- environment: string;
24
- preview?: boolean;
25
- templateName?: WIDGET_NAME;
26
- isMobile?: boolean;
27
- storeId: string;
28
- countryCode?: string;
29
- widgetLanguage?: LANGUAGE_VALUES;
30
- previewLanguage: ISO_CODES_VALUES;
31
- }
32
-
33
- const ShopifyForm: React.FC<ShopifyWidgetProps> = props => {
34
- const [isVisible, setIsVisible] = useState<boolean>(false);
35
- const [selectedScreen, setSelectedScreen] = useState<SCREENS>(
36
- SCREENS.LEAD_SCREEN,
37
- );
38
- const popupReference = useRef(null);
39
- const languageUtils = new LanguageUtils();
40
- const [widgetLanguage, setWidgetLanguage] = useState(LANGUAGE_VALUES.ENGLISH);
41
- const [currentUrl, setCurrentUrl] = useState(window.location.href);
42
- const isFirstLoad = useRef(true);
43
-
44
- // Listen for URL changes (including query params)
45
- useEffect(() => {
46
- const handleUrlChange = () => {
47
- setCurrentUrl(window.location.href);
48
- };
49
-
50
- // Listen for browser back/forward navigation
51
- window.addEventListener('popstate', handleUrlChange);
52
-
53
- // Listen for hash changes
54
- window.addEventListener('hashchange', handleUrlChange);
55
-
56
- // Intercept pushState and replaceState for SPA routing
57
- const originalPushState = history.pushState;
58
- const originalReplaceState = history.replaceState;
59
-
60
- history.pushState = function (...args) {
61
- originalPushState.apply(this, args);
62
- handleUrlChange();
63
- };
64
-
65
- history.replaceState = function (...args) {
66
- originalReplaceState.apply(this, args);
67
- handleUrlChange();
68
- };
69
-
70
- return () => {
71
- window.removeEventListener('popstate', handleUrlChange);
72
- window.removeEventListener('hashchange', handleUrlChange);
73
- history.pushState = originalPushState;
74
- history.replaceState = originalReplaceState;
75
- };
76
- }, []);
77
-
78
- const copyNotifierButtonStyles = () => {
79
- const id = props.id;
80
- const selector = `.shopify-payment-button__button#bik-cta-${id}`;
81
-
82
- const shopifyButton = document.querySelector(selector);
83
- if (!shopifyButton) {
84
- return;
85
- }
86
-
87
- const computedStyle = window.getComputedStyle(shopifyButton);
88
-
89
- const styleElement = document.createElement('style');
90
- let cssText = `.bik_notifier_${id}_button {`;
91
-
92
- for (let i = 0; i < computedStyle.length; i++) {
93
- const property = computedStyle.item(i);
94
- if (property) {
95
- const value = computedStyle.getPropertyValue(property);
96
- if (value) {
97
- cssText += `${property}: ${value}; `;
98
- }
99
- }
100
- }
101
-
102
- const addToCartButtonAvailable =
103
- document.getElementsByClassName('add-to-cart');
104
-
105
- if (!addToCartButtonAvailable.length) {
106
- cssText += 'width: 100%; height: 44px; ';
107
- }
108
-
109
- cssText += 'visibility: visible; }';
110
- styleElement.textContent = cssText;
111
-
112
- // Ensure only one style tag per button ID to avoid duplicates
113
- const existingStyle = document.head.querySelector(
114
- `style[data-bik-style-id="${id}"]`,
115
- );
116
- if (existingStyle) {
117
- existingStyle.remove();
118
- }
119
- styleElement.setAttribute('data-bik-style-id', id);
120
- document.head.appendChild(styleElement);
121
-
122
- shopifyButton.classList.add(`bik_notifier_${id}_button`);
123
- shopifyButton.classList.remove('shopify-payment-button__button');
124
- };
125
-
126
- useEffect(() => {
127
- (window as any)[`bik_notifier_${props.id}`] = {
128
- open: (widget_id?: string) => {
129
- if (widget_id === `bik-cta-${props.id}`) {
130
- launchModal();
131
- }
132
- },
133
- };
134
-
135
- if (isFirstLoad.current) {
136
- // On first load, wait for DOM to be ready
137
- setTimeout(() => {
138
- copyNotifierButtonStyles();
139
- }, 1000);
140
- isFirstLoad.current = false;
141
- } else {
142
- // On subsequent URL changes, call immediately
143
- copyNotifierButtonStyles();
144
- }
145
- }, [currentUrl]);
146
-
147
- const launchModal = () => {
148
- setIsVisible(true);
149
- cookieClickHandler(
150
- `bik-${props.id}-clicked`,
151
- 'bikClick',
152
- 'WIDGET_CLICKED',
153
- 0,
154
- props.id,
155
- props.environment,
156
- );
157
- };
158
-
159
- useEffect(() => {
160
- function handleClickOutside(event) {
161
- if (
162
- popupReference.current &&
163
- !popupReference.current.contains(event.target)
164
- ) {
165
- if (!props.preview) {
166
- closePopup();
167
- }
168
- }
169
- }
170
- document.addEventListener('click', handleClickOutside);
171
- return () => {
172
- document.removeEventListener('click', handleClickOutside);
173
- };
174
- }, [popupReference]);
175
-
176
- useEffect(() => {
177
- const isBikURL =
178
- window.location.href?.includes('https://dashboard.bik.ai/') ||
179
- window.location.href?.includes('https://staging.dashboard.bik.ai/');
180
- const previewLanguage = props?.widgetCustomisation?.previewLanguage;
181
- const storeLanguage =
182
- (isBikURL ? previewLanguage : window?.Shopify?.locale) ??
183
- previewLanguage ??
184
- LANGUAGE_ISO_CODES.EN;
185
- setWidgetLanguage(languageUtils.getStoreLanguage(storeLanguage));
186
- }, [window.location.href, props?.widgetCustomisation?.previewLanguage]);
187
-
188
- const closePopup = () => {
189
- setIsVisible(false);
190
- setSelectedScreen(SCREENS.LEAD_SCREEN);
191
- };
192
-
193
- return (
194
- <>
195
- {isVisible && (
196
- <Popup
197
- {...props}
198
- templateName={props.info.templateName}
199
- isVisible={isVisible}
200
- onClose={closePopup}
201
- popupReference={popupReference}
202
- selectedScreen={selectedScreen}
203
- setSelectedScreen={setSelectedScreen}
204
- widgetLanguage={widgetLanguage}
205
- />
206
- )}
207
- </>
208
- );
209
- };
210
-
211
- export default ShopifyForm;
212
- if (process.env.NODE_ENV !== 'development') {
213
- includeMe(ShopifyForm);
214
- }
@@ -1,117 +0,0 @@
1
- .popupContainer {
2
- width: 120px;
3
- position: absolute;
4
- z-index: 2147483646;
5
- opacity: 1;
6
- transition:
7
- opacity 0.3s ease,
8
- transform 0.3s ease;
9
- height: auto;
10
- }
11
-
12
- .popupContainer__content {
13
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
14
- border-radius: 4px;
15
- display: flex;
16
- flex-direction: column;
17
- align-items: center;
18
- position: relative;
19
- }
20
-
21
- .popupContainer__content * {
22
- font-family: inherit;
23
- }
24
-
25
- .popupContainer__image {
26
- width: 100%;
27
- height: auto;
28
- aspect-ratio: 1.56;
29
- margin: 0;
30
- padding: 0;
31
- border-top-left-radius: 4px;
32
- border-top-right-radius: 4px;
33
- }
34
-
35
- .popupContainer__inner_content {
36
- padding: 0px 6px;
37
- display: flex;
38
- flex-direction: column;
39
- align-items: center;
40
- gap: 3px;
41
- flex: 1;
42
- }
43
-
44
- .popupContainer__title {
45
- font-size: 8px;
46
- line-height: 10px;
47
- font-weight: 600;
48
- text-align: center;
49
- font-family: inherit;
50
-
51
- p {
52
- margin: 0;
53
- padding: 0;
54
- }
55
- }
56
-
57
- .popupContainer__subTitle {
58
- font-size: 6px;
59
- line-height: 8px;
60
- font-weight: 400;
61
- text-align: center;
62
- font-family: inherit;
63
-
64
- p {
65
- margin: 0;
66
- padding: 0;
67
- }
68
- }
69
-
70
- .popupCloser__button {
71
- height: 15px;
72
- width: 15px;
73
- border-radius: 50%;
74
- display: flex;
75
- align-items: center;
76
- justify-content: center;
77
- position: absolute;
78
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
79
- cursor: pointer;
80
- z-index: 2147483647;
81
- }
82
-
83
- .popupContainer__button {
84
- cursor: pointer;
85
- padding: 2px;
86
- border: none;
87
- border-radius: 2px;
88
- font-weight: 600;
89
- font-size: 8px;
90
- text-align: center;
91
- width: 90%;
92
- line-height: 10px;
93
- }
94
-
95
- .popupContainer__poweredBy {
96
- margin: 4px;
97
- padding: 0;
98
- line-height: 0;
99
- text-align: center;
100
-
101
- a {
102
- text-decoration: underline;
103
- font-family: inherit;
104
- font-weight: 400;
105
- font-size: 6px;
106
- line-height: 8px;
107
- color: #212121;
108
- cursor: pointer;
109
- text-underline-offset: 2px;
110
- }
111
- }
112
-
113
- .popupContainer__titleIcon {
114
- height: 20px;
115
- width: auto;
116
- margin: 6px 0;
117
- }
@@ -1,131 +0,0 @@
1
- .popupWrapper {
2
- position: absolute;
3
- display: block;
4
- top: 0;
5
- left: 0;
6
- z-index: 3;
7
- height: 100%;
8
- width: 100%;
9
- background-color: rgba(0, 0, 0, 0.4);
10
- }
11
-
12
- .popupContainer {
13
- width: 80%;
14
- position: fixed;
15
- z-index: 4;
16
- opacity: 1;
17
- transition:
18
- opacity 0.3s ease,
19
- transform 0.3s ease;
20
- height: auto;
21
- }
22
-
23
- .popupContainer__content {
24
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
25
- border-radius: 4px;
26
- display: flex;
27
- flex-direction: column;
28
- align-items: center;
29
- gap: 3px;
30
- position: relative;
31
- }
32
-
33
- .popupContainer__content * {
34
- font-family: inherit;
35
- }
36
-
37
- .popupContainer__image {
38
- width: 100%;
39
- height: auto;
40
- aspect-ratio: 1.56;
41
- margin: 0;
42
- padding: 0;
43
- border-top-left-radius: 4px;
44
- border-top-right-radius: 4px;
45
- }
46
-
47
- .popupContainer__inner_content {
48
- padding: 3px 9px;
49
- display: flex;
50
- flex-direction: column;
51
- align-items: center;
52
- gap: 6px;
53
- flex: 1;
54
- }
55
-
56
- .popupContainer__title {
57
- font-size: 8px;
58
- line-height: 10px;
59
- font-weight: 600;
60
- text-align: center;
61
- font-family: inherit;
62
- max-width: 90%;
63
-
64
- p {
65
- margin: 0;
66
- padding: 0;
67
- }
68
- }
69
-
70
- .popupContainer__subTitle {
71
- font-size: 6px;
72
- line-height: 8px;
73
- font-weight: 400;
74
- text-align: center;
75
- font-family: inherit;
76
- max-width: 90%;
77
-
78
- p {
79
- margin: 0;
80
- padding: 0;
81
- }
82
- }
83
-
84
- .popupCloser__button {
85
- height: 15px;
86
- width: 15px;
87
- border-radius: 50%;
88
- display: flex;
89
- align-items: center;
90
- justify-content: center;
91
- position: absolute;
92
- box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
93
- cursor: pointer;
94
- z-index: 5;
95
- }
96
-
97
- .popupContainer__button {
98
- cursor: pointer;
99
- padding: 3px;
100
- border: none;
101
- border-radius: 3px;
102
- font-weight: 600;
103
- font-size: 8px;
104
- text-align: center;
105
- margin-top: 4px;
106
- width: 90%;
107
- line-height: 10px;
108
- }
109
-
110
- .popupContainer__poweredBy {
111
- margin: 3px;
112
- padding: 0;
113
- text-align: center;
114
-
115
- a {
116
- text-decoration: underline;
117
- font-family: inherit;
118
- font-weight: 400;
119
- font-size: 6px;
120
- line-height: 8px;
121
- color: #212121;
122
- cursor: pointer;
123
- text-underline-offset: 2px;
124
- }
125
- }
126
-
127
- .popupContainer__titleIcon {
128
- height: 20px;
129
- width: auto;
130
- margin: 6px 0;
131
- }