@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
package/src/index.html DELETED
@@ -1,30 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <style></style>
5
- <meta charset="utf-8" />
6
- <meta
7
- name="viewport"
8
- content="width=device-width, initial-scale=1, shrink-to-fit=no, maximum-scale=1"
9
- />
10
- <meta name="theme-color" content="#000000" />
11
- <title>Bik widgets dev</title>
12
- <script
13
- type="text/javascript"
14
- async
15
- href="https://api.staging.bik.ai/bik-widgets/bap/sumesh/vendor.js"
16
- ></script>
17
- <script
18
- type="text/javascript"
19
- async
20
- href="https://api.staging.bik.ai/bik-widgets/bap/sumesh/singleButtonRedirection.js"
21
- ></script>
22
- </head>
23
-
24
- <body>
25
- <noscript> You need to enable JavaScript to run this app. </noscript>
26
- <div id="root">
27
- <!-- This div is where our app will run -->
28
- </div>
29
- </body>
30
- </html>
package/src/index.ts DELETED
@@ -1,32 +0,0 @@
1
- export { default as Fab } from './components/Fab';
2
- export type { IFab } from './components/Fab';
3
- export { IconSvg } from './components/Fab';
4
-
5
- export { default as CentrallyAlignedModal } from './widgets/CentrallyAlignedPopup/modal';
6
- export type { ICentrallyAlignedModal } from './widgets/CentrallyAlignedPopup/modal';
7
-
8
- export { default as BottomDrawerModal } from './widgets/BottomDrawer/modal';
9
- export type { IBottomDrawerModal } from './widgets/BottomDrawer/modal';
10
-
11
- export { default as SingleButtonRedirection } from './widgets/SingleButtonRedirection';
12
- export type { ISingleButtonRedirection } from './widgets/SingleButtonRedirection';
13
-
14
- export { default as Wheel } from './widgets/STW/wheel';
15
-
16
- // STW user details screen (aka "UserInputs" in MF exposes)
17
- export { default as UserInputs } from './widgets/STW/userDetails';
18
- export type { IUserInputs, IPhoneInput, IEmailInput } from './widgets/STW/userDetails';
19
-
20
- export { default as CouponDetails } from './widgets/STW/couponDetails';
21
-
22
- export { default as STW2 } from './widgets/STW/stw2Pages/stw2';
23
-
24
- export { default as ScratchCardModal } from './widgets/ScratchCard/modal';
25
- export type { IScratchCardModal } from './widgets/ScratchCard/modal';
26
-
27
- export { default as DirectReward } from './widgets/DirectReward/directReward';
28
-
29
- export { default as CaptivateBanner } from './widgets/CaptivateBanner/captivateBanner';
30
-
31
- export { default as ShopifyForm } from './widgets/ShopifyForm/shopifyForm';
32
- export { SCREENS } from './widgets/ShopifyForm/shopifyForm';
package/src/index.tsx DELETED
@@ -1 +0,0 @@
1
- import('./bootstrap');
@@ -1,21 +0,0 @@
1
- export class WidgetRepo {
2
- async sendWidgetEvent(
3
- event: string,
4
- env: string,
5
- widgetId: string,
6
- eventProperties?: {},
7
- ) {
8
- fetch(`${env}/publicApiFunctions-sendWidgetEvent`, {
9
- method: 'POST',
10
- headers: {
11
- Accept: 'application/json',
12
- 'Content-Type': 'application/json',
13
- },
14
- body: JSON.stringify({
15
- widgetId: widgetId,
16
- event,
17
- eventProperties,
18
- }),
19
- }).then();
20
- }
21
- }
@@ -1,73 +0,0 @@
1
- export interface CustomField {
2
- id: number;
3
- storeId: string;
4
- fieldName: string;
5
- fieldType:
6
- | 'single_line'
7
- | 'multi_line'
8
- | 'number'
9
- | 'checkbox'
10
- | 'date'
11
- | 'date_time'
12
- | 'dropdown'
13
- | 'multiselect_dropdown';
14
- options: string[];
15
- }
16
-
17
- export interface CustomFieldsConfig {
18
- mandatory: CustomField[];
19
- optional: CustomField[];
20
- }
21
-
22
- export type CustomFieldValue = string | string[] | boolean | number | null;
23
-
24
- export interface CustomFieldsData {
25
- [fieldId: number]: CustomFieldValue;
26
- }
27
-
28
- export interface CustomFieldError {
29
- [fieldId: number]: string | null;
30
- }
31
-
32
- export interface UserFieldDetails {
33
- value: string | null | boolean;
34
- countryCodeData?: {
35
- dial: string;
36
- code: string;
37
- code3: string;
38
- };
39
- showComponent?: boolean;
40
- error: string | null;
41
- }
42
-
43
- export interface UserFields {
44
- isWhatsapp: UserFieldDetails;
45
- isSms: UserFieldDetails;
46
- isEmail: UserFieldDetails;
47
- isPolicyChecked: UserFieldDetails;
48
- customFields?: CustomFieldsData;
49
- }
50
-
51
- // Validation types
52
- export interface CustomFieldValidationResult {
53
- isValid: boolean;
54
- errors: CustomFieldError;
55
- }
56
-
57
- export enum LEAD_GENERATION_CHANNELS {
58
- EMAIL = 'email',
59
- SMS = 'sms',
60
- WHATSAPP = 'whatsapp',
61
- }
62
-
63
- // Form submission payload types
64
- export interface ChannelInfo {
65
- channel: LEAD_GENERATION_CHANNELS & 'customFields';
66
- value: string | boolean | number;
67
- customFieldId?: number;
68
- }
69
-
70
- export interface FormSubmissionPayload {
71
- primaryInfo: ChannelInfo[];
72
- secondaryInfo: ChannelInfo[];
73
- }
@@ -1,70 +0,0 @@
1
- import { WidgetRepo } from '../repo/widgetRepo';
2
-
3
- export class CookieUtils {
4
- widgetRepo: WidgetRepo;
5
- d = new Date();
6
-
7
- constructor() {
8
- this.widgetRepo = new WidgetRepo();
9
- }
10
-
11
- setCookie(cname: string, cvalue: string, exdays: number) {
12
- this.d.setTime(this.d.getTime() + exdays * 24 * 60 * 60 * 1000);
13
- let expires = 'expires=' + this.d.toUTCString();
14
- document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/';
15
- }
16
-
17
- getCookie(name) {
18
- let cookies;
19
- cookies = document.cookie
20
- .split(';')
21
- .map(cookie => cookie.split('='))
22
- .reduce(
23
- (accumulator, [key, value]) => ({
24
- ...accumulator,
25
- [key.trim()]: decodeURIComponent(value),
26
- }),
27
- {},
28
- );
29
- return cookies[name];
30
- }
31
-
32
- cookieProcessor(
33
- cookieName,
34
- cookieValue,
35
- eventName,
36
- expiry,
37
- env,
38
- id,
39
- eventProperties?: any,
40
- ) {
41
- this.setCookie(cookieName, cookieValue, expiry);
42
- this.widgetRepo.sendWidgetEvent(eventName, env, id, eventProperties).then();
43
- }
44
-
45
- cookieClickHandler(
46
- cookieName,
47
- cookieValue,
48
- eventN,
49
- exDay,
50
- env,
51
- id,
52
- eventProperties?: any,
53
- ) {
54
- if (this.getCookie(cookieName) !== cookieValue) {
55
- this.cookieProcessor(
56
- cookieName,
57
- cookieValue,
58
- eventN,
59
- exDay,
60
- env,
61
- id,
62
- eventProperties,
63
- );
64
- }
65
- }
66
-
67
- addItemInLocalStorage(key, value) {
68
- localStorage.setItem(key, JSON.stringify(value));
69
- }
70
- }
@@ -1,67 +0,0 @@
1
- import { CustomField } from '../types/customFields';
2
-
3
- export const CUSTOM_FIELDS = 'customFields';
4
-
5
- export interface CustomFieldsI {
6
- id: number;
7
- storeId: string;
8
- fieldName: string;
9
- aliasName?: string;
10
- dataType?: string;
11
- fieldType: string;
12
- options: string[];
13
- isVisible?: boolean;
14
- createdAt?: string;
15
- updatedAt?: string;
16
- }
17
-
18
- export const mapCustomFields = (
19
- customFields: (CustomFieldsI | Record<string, unknown>)[] | undefined,
20
- ): CustomField[] => {
21
- if (!customFields || !Array.isArray(customFields)) {
22
- return [];
23
- }
24
-
25
- return customFields.map((field: CustomFieldsI | Record<string, unknown>) => {
26
- return {
27
- id: field.id as number,
28
- storeId: field.storeId as string,
29
- fieldName: field.fieldName as string,
30
- fieldType: field.fieldType as CustomField['fieldType'],
31
- options: (field.options as string[]) || [],
32
- };
33
- });
34
- };
35
-
36
- export const isCustomField = (field: unknown): field is CustomField => {
37
- return (
38
- field &&
39
- typeof field === 'object' &&
40
- typeof (field as Record<string, unknown>).id === 'number' &&
41
- typeof (field as Record<string, unknown>).storeId === 'string' &&
42
- typeof (field as Record<string, unknown>).fieldName === 'string' &&
43
- typeof (field as Record<string, unknown>).fieldType === 'string' &&
44
- Array.isArray((field as Record<string, unknown>).options)
45
- );
46
- };
47
-
48
- export const areCustomFields = (fields: unknown[]): fields is CustomField[] => {
49
- return Array.isArray(fields) && fields.every(isCustomField);
50
- };
51
-
52
- export const getCustomFieldsFromConfig = (
53
- config: Record<string, unknown>,
54
- type: 'mandatory' | 'optional',
55
- ): CustomField[] => {
56
- let fields;
57
-
58
- if (type === 'mandatory') {
59
- fields = (config?.mandatoryOption as Record<string, unknown>)?.customFields;
60
- } else {
61
- fields = (config?.optionalOptions as Record<string, unknown>)?.customFields;
62
- }
63
-
64
- return mapCustomFields(
65
- fields as (CustomFieldsI | Record<string, unknown>)[] | undefined,
66
- );
67
- };
@@ -1,201 +0,0 @@
1
- import {
2
- CustomField,
3
- CustomFieldsData,
4
- CustomFieldError,
5
- CustomFieldValidationResult,
6
- CustomFieldValue,
7
- } from '../types/customFields';
8
-
9
- export const validateField = (
10
- field: CustomField,
11
- value: CustomFieldValue,
12
- isRequired: boolean,
13
- ): string | null => {
14
- if (field.fieldType === 'checkbox') {
15
- return null;
16
- }
17
-
18
- if (isRequired) {
19
- if (
20
- value === null ||
21
- value === undefined ||
22
- (typeof value === 'string' && value.trim() === '') ||
23
- (Array.isArray(value) && value.length === 0)
24
- ) {
25
- return `${field.fieldName} is required`;
26
- }
27
- }
28
-
29
- switch (field.fieldType) {
30
- case 'number': {
31
- const numValue = Number(value);
32
- if (isNaN(numValue)) {
33
- return `${field.fieldName} must be a valid number`;
34
- }
35
- break;
36
- }
37
-
38
- case 'single_line':
39
- if (typeof value === 'string' && value.length > 50) {
40
- return `${field.fieldName} must be 50 characters or less`;
41
- }
42
- break;
43
-
44
- case 'multi_line':
45
- if (typeof value === 'string' && value.length > 500) {
46
- return `${field.fieldName} must be 500 characters or less`;
47
- }
48
- break;
49
-
50
- case 'dropdown':
51
- if (value && !field.options.includes(value as string)) {
52
- return `${field.fieldName} must be one of the available options`;
53
- }
54
- break;
55
-
56
- case 'multiselect_dropdown':
57
- if (Array.isArray(value)) {
58
- const invalidOptions = value.filter(v => !field.options.includes(v));
59
- if (invalidOptions.length > 0) {
60
- return `${field.fieldName} contains invalid options`;
61
- }
62
- }
63
- break;
64
-
65
- case 'date':
66
- case 'date_time':
67
- if (value && typeof value === 'string') {
68
- const date = new Date(value);
69
- if (isNaN(date.getTime())) {
70
- return `${field.fieldName} must be a valid date`;
71
- }
72
- }
73
- break;
74
- }
75
- return null;
76
- };
77
-
78
- export const validateCustomFields = (
79
- mandatoryFields: CustomField[],
80
- optionalFields: CustomField[],
81
- customFieldsData: CustomFieldsData = {},
82
- ): CustomFieldValidationResult => {
83
- const errors: CustomFieldError = {};
84
- let isValid = true;
85
-
86
- mandatoryFields.forEach(field => {
87
- const error = validateField(field, customFieldsData[field.id], true);
88
- if (error) {
89
- errors[field.id] = error;
90
- isValid = false;
91
- }
92
- });
93
-
94
- optionalFields.forEach(field => {
95
- const value = customFieldsData[field.id];
96
- if (value !== null && value !== undefined && value !== '') {
97
- const error = validateField(field, value, false);
98
- if (error) {
99
- errors[field.id] = error;
100
- isValid = false;
101
- }
102
- }
103
- });
104
-
105
- return { isValid, errors };
106
- };
107
-
108
- export const getFieldTypeErrorMessage = (fieldType: string): string => {
109
- const messages = {
110
- single_line: 'Please enter valid text',
111
- multi_line: 'Please enter valid text',
112
- number: 'Please enter a valid number',
113
- checkbox: 'Please check this field',
114
- date: 'Please enter a valid date',
115
- date_time: 'Please enter a valid date and time',
116
- dropdown: 'Please select an option',
117
- multiselect_dropdown: 'Please select at least one option',
118
- };
119
-
120
- return messages[fieldType] || 'Please enter a valid value';
121
- };
122
-
123
- export const sanitizeValue = (
124
- field: CustomField,
125
- value: CustomFieldValue,
126
- ): CustomFieldValue => {
127
- switch (field.fieldType) {
128
- case 'single_line':
129
- case 'multi_line':
130
- return typeof value === 'string' ? value.trim() : '';
131
-
132
- case 'number': {
133
- if (value === '' || value === null || value === undefined) {
134
- return null;
135
- }
136
- const numValue = Number(value);
137
- return isNaN(numValue) ? null : numValue;
138
- }
139
-
140
- case 'checkbox':
141
- return Boolean(value);
142
-
143
- case 'dropdown':
144
- return typeof value === 'string' ? value : null;
145
-
146
- case 'multiselect_dropdown':
147
- return Array.isArray(value) ? value : [];
148
-
149
- case 'date':
150
- case 'date_time':
151
- return typeof value === 'string' ? value : '';
152
-
153
- default:
154
- return value;
155
- }
156
- };
157
-
158
- export const getDefaultCustomFieldValue = (
159
- fieldType: string,
160
- ): CustomFieldValue => {
161
- switch (fieldType) {
162
- case 'checkbox':
163
- return false;
164
- case 'multiselect_dropdown':
165
- return [];
166
- case 'number':
167
- return null;
168
- default:
169
- return '';
170
- }
171
- };
172
-
173
- export const formatCustomFieldValue = (
174
- field: CustomField,
175
- value: CustomFieldValue,
176
- ): string => {
177
- if (value === null || value === undefined) {
178
- return '';
179
- }
180
-
181
- switch (field.fieldType) {
182
- case 'checkbox':
183
- return value ? 'Yes' : 'No';
184
- case 'multiselect_dropdown':
185
- return Array.isArray(value) ? value.join(', ') : '';
186
- case 'date':
187
- if (typeof value === 'string' && value) {
188
- const date = new Date(value);
189
- return date.toLocaleDateString();
190
- }
191
- return '';
192
- case 'date_time':
193
- if (typeof value === 'string' && value) {
194
- const date = new Date(value);
195
- return date.toLocaleString();
196
- }
197
- return '';
198
- default:
199
- return String(value);
200
- }
201
- };
@@ -1,21 +0,0 @@
1
- export function encryptBikData(data: string) {
2
- const key = 'phaedrus';
3
- let encryptedData = '';
4
- for (let i = 0; i < data.length; i++) {
5
- encryptedData += String.fromCharCode(
6
- data.charCodeAt(i) ^ key.charCodeAt(i % key.length),
7
- );
8
- }
9
- return encryptedData;
10
- }
11
-
12
- export function decryptBikData(encryptedData: string) {
13
- const key = 'phaedrus';
14
- let decryptedData = '';
15
- for (let i = 0; i < encryptedData.length; i++) {
16
- decryptedData += String.fromCharCode(
17
- encryptedData.charCodeAt(i) ^ key.charCodeAt(i % key.length),
18
- );
19
- }
20
- return decryptedData;
21
- }
@@ -1,31 +0,0 @@
1
- interface ExitIntentTriggers {
2
- exitIntentFastUpScroll?: boolean | null;
3
- exitIntentTimeDelay?: number | null;
4
- }
5
-
6
- interface ShouldShowExitIntentProps {
7
- visiblePages: string[];
8
- currentLocation: string;
9
- currentPathname: string;
10
- isMobileDevice: boolean;
11
- triggers: ExitIntentTriggers;
12
- }
13
-
14
- export const shouldShowExitIntent = ({
15
- visiblePages,
16
- currentLocation,
17
- currentPathname,
18
- isMobileDevice,
19
- triggers,
20
- }: ShouldShowExitIntentProps): boolean => {
21
- const isPageVisible =
22
- visiblePages.includes('/*') ||
23
- visiblePages.includes(currentLocation) ||
24
- visiblePages.some(page => currentPathname.startsWith(page));
25
-
26
- const hasTriggerConditions =
27
- (isMobileDevice && triggers?.exitIntentFastUpScroll) ||
28
- Boolean(triggers?.exitIntentTimeDelay);
29
-
30
- return isPageVisible && hasTriggerConditions;
31
- };
@@ -1,11 +0,0 @@
1
- .bik-widget__outer-wrapper p {
2
- padding: 0;
3
- margin: 0;
4
- box-sizing: border-box;
5
- color: unset;
6
- }
7
-
8
- .bik-widget__outer-wrapper strong,
9
- b {
10
- font-weight: 600;
11
- }