@capillarytech/creatives-library 8.0.263 → 8.0.265

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 (280) hide show
  1. package/assets/Android.png +0 -0
  2. package/assets/iOS.png +0 -0
  3. package/constants/unified.js +1 -3
  4. package/initialReducer.js +0 -2
  5. package/package.json +1 -1
  6. package/services/api.js +0 -15
  7. package/services/tests/api.test.js +0 -34
  8. package/tests/integration/TemplateCreation/TemplateCreation.integration.test.js +35 -17
  9. package/tests/integration/TemplateCreation/api-response.js +1 -31
  10. package/tests/integration/TemplateCreation/msw-handler.js +0 -2
  11. package/utils/common.js +0 -11
  12. package/utils/commonUtils.js +5 -28
  13. package/utils/tests/commonUtil.test.js +0 -224
  14. package/utils/tests/transformerUtils.test.js +0 -297
  15. package/utils/transformTemplateConfig.js +10 -0
  16. package/utils/transformerUtils.js +0 -40
  17. package/v2Components/CapDeviceContent/index.js +56 -61
  18. package/v2Components/CapImageUpload/constants.js +0 -2
  19. package/v2Components/CapImageUpload/index.js +16 -65
  20. package/v2Components/CapImageUpload/index.scss +1 -4
  21. package/v2Components/CapImageUpload/messages.js +1 -5
  22. package/v2Components/CapTagList/index.js +1 -6
  23. package/v2Components/CapTagListWithInput/index.js +1 -5
  24. package/v2Components/CapTagListWithInput/messages.js +1 -1
  25. package/v2Components/CapWhatsappCTA/tests/index.test.js +0 -5
  26. package/v2Components/ErrorInfoNote/index.js +72 -402
  27. package/v2Components/ErrorInfoNote/messages.js +6 -32
  28. package/v2Components/ErrorInfoNote/style.scss +6 -278
  29. package/v2Components/FormBuilder/tests/index.test.js +4 -13
  30. package/v2Components/HtmlEditor/HTMLEditor.js +99 -418
  31. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1882
  32. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +16 -27
  33. package/v2Components/HtmlEditor/_htmlEditor.scss +45 -108
  34. package/v2Components/HtmlEditor/_index.lazy.scss +1 -0
  35. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +102 -23
  36. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +140 -148
  37. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
  38. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  39. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +1 -9
  40. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +6 -31
  41. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -22
  42. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +7 -4
  43. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +45 -35
  44. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +3 -1
  45. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  46. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +6 -7
  47. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +10 -7
  48. package/v2Components/HtmlEditor/components/PreviewPane/index.js +43 -22
  49. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  50. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +152 -0
  51. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/_validationErrorDisplay.scss +0 -18
  52. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -36
  53. package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +34 -46
  54. package/v2Components/HtmlEditor/components/ValidationPanel/index.js +46 -52
  55. package/v2Components/HtmlEditor/constants.js +20 -45
  56. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
  57. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +16 -351
  58. package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
  59. package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
  60. package/v2Components/HtmlEditor/hooks/useValidation.js +56 -213
  61. package/v2Components/HtmlEditor/index.js +1 -1
  62. package/v2Components/HtmlEditor/messages.js +94 -102
  63. package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +45 -214
  64. package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +0 -134
  65. package/v2Components/HtmlEditor/utils/contentSanitizer.js +41 -40
  66. package/v2Components/HtmlEditor/utils/htmlValidator.js +72 -71
  67. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +124 -158
  68. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
  69. package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -66
  70. package/v2Components/MobilePushPreviewV2/index.js +7 -33
  71. package/v2Components/TemplatePreview/_templatePreview.scss +24 -55
  72. package/v2Components/TemplatePreview/index.js +32 -47
  73. package/v2Components/TemplatePreview/messages.js +0 -4
  74. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
  75. package/v2Containers/App/constants.js +0 -5
  76. package/v2Containers/BeeEditor/index.js +90 -172
  77. package/v2Containers/CreativesContainer/SlideBoxContent.js +53 -184
  78. package/v2Containers/CreativesContainer/SlideBoxFooter.js +13 -163
  79. package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -3
  80. package/v2Containers/CreativesContainer/constants.js +0 -4
  81. package/v2Containers/CreativesContainer/index.js +46 -408
  82. package/v2Containers/CreativesContainer/messages.js +0 -12
  83. package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +0 -210
  84. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +2 -11
  85. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +50 -342
  86. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -103
  87. package/v2Containers/Email/actions.js +0 -7
  88. package/v2Containers/Email/constants.js +1 -5
  89. package/v2Containers/Email/index.js +36 -237
  90. package/v2Containers/Email/messages.js +0 -32
  91. package/v2Containers/Email/reducer.js +1 -12
  92. package/v2Containers/Email/sagas.js +7 -61
  93. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
  94. package/v2Containers/Email/tests/reducer.test.js +0 -46
  95. package/v2Containers/Email/tests/sagas.test.js +29 -320
  96. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +21 -211
  97. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +74 -40
  98. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +67 -2
  99. package/v2Containers/EmailWrapper/constants.js +0 -2
  100. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +77 -629
  101. package/v2Containers/EmailWrapper/index.js +23 -103
  102. package/v2Containers/EmailWrapper/messages.js +1 -65
  103. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
  104. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +77 -594
  105. package/v2Containers/InApp/actions.js +0 -7
  106. package/v2Containers/InApp/constants.js +4 -20
  107. package/v2Containers/InApp/index.js +359 -802
  108. package/v2Containers/InApp/index.scss +3 -4
  109. package/v2Containers/InApp/messages.js +3 -7
  110. package/v2Containers/InApp/reducer.js +3 -21
  111. package/v2Containers/InApp/sagas.js +9 -29
  112. package/v2Containers/InApp/selectors.js +5 -25
  113. package/v2Containers/InApp/tests/index.test.js +50 -154
  114. package/v2Containers/InApp/tests/reducer.test.js +0 -34
  115. package/v2Containers/InApp/tests/sagas.test.js +9 -61
  116. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +0 -3
  117. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +0 -2
  118. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +0 -2
  119. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +0 -9
  120. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +0 -12
  121. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +0 -4
  122. package/v2Containers/TagList/index.js +19 -62
  123. package/v2Containers/Templates/ChannelTypeIllustration.js +1 -13
  124. package/v2Containers/Templates/_templates.scss +1 -265
  125. package/v2Containers/Templates/actions.js +1 -2
  126. package/v2Containers/Templates/constants.js +0 -1
  127. package/v2Containers/Templates/index.js +38 -363
  128. package/v2Containers/Templates/messages.js +0 -28
  129. package/v2Containers/Templates/reducer.js +0 -2
  130. package/v2Containers/Templates/tests/index.test.js +0 -10
  131. package/v2Containers/TemplatesV2/TemplatesV2.style.js +2 -4
  132. package/v2Containers/TemplatesV2/index.js +7 -15
  133. package/v2Containers/TemplatesV2/messages.js +0 -4
  134. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +0 -34
  135. package/utils/imageUrlUpload.js +0 -141
  136. package/v2Components/CapImageUrlUpload/constants.js +0 -26
  137. package/v2Components/CapImageUrlUpload/index.js +0 -365
  138. package/v2Components/CapImageUrlUpload/index.scss +0 -35
  139. package/v2Components/CapImageUrlUpload/messages.js +0 -47
  140. package/v2Components/ErrorInfoNote/constants.js +0 -1
  141. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -870
  142. package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +0 -6
  143. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -281
  144. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -295
  145. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
  146. package/v2Components/HtmlEditor/utils/validationConstants.js +0 -38
  147. package/v2Components/MobilePushPreviewV2/constants.js +0 -6
  148. package/v2Containers/BeePopupEditor/_beePopupEditor.scss +0 -14
  149. package/v2Containers/BeePopupEditor/constants.js +0 -10
  150. package/v2Containers/BeePopupEditor/index.js +0 -194
  151. package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
  152. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1246
  153. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -2472
  154. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +0 -520
  155. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +0 -956
  156. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +0 -376
  157. package/v2Containers/InApp/__tests__/sagas.test.js +0 -363
  158. package/v2Containers/InApp/tests/selectors.test.js +0 -612
  159. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +0 -151
  160. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
  161. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -23
  162. package/v2Containers/InAppWrapper/constants.js +0 -16
  163. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +0 -473
  164. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +0 -198
  165. package/v2Containers/InAppWrapper/index.js +0 -148
  166. package/v2Containers/InAppWrapper/messages.js +0 -49
  167. package/v2Containers/InappAdvance/index.js +0 -1099
  168. package/v2Containers/InappAdvance/index.scss +0 -10
  169. package/v2Containers/InappAdvance/tests/index.test.js +0 -448
  170. package/v2Containers/WebPush/Create/components/BrandIconSection.js +0 -108
  171. package/v2Containers/WebPush/Create/components/ButtonForm.js +0 -172
  172. package/v2Containers/WebPush/Create/components/ButtonItem.js +0 -101
  173. package/v2Containers/WebPush/Create/components/ButtonList.js +0 -145
  174. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.js +0 -164
  175. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.test.js +0 -463
  176. package/v2Containers/WebPush/Create/components/FormActions.js +0 -54
  177. package/v2Containers/WebPush/Create/components/FormActions.test.js +0 -163
  178. package/v2Containers/WebPush/Create/components/MediaSection.js +0 -142
  179. package/v2Containers/WebPush/Create/components/MediaSection.test.js +0 -341
  180. package/v2Containers/WebPush/Create/components/MessageSection.js +0 -103
  181. package/v2Containers/WebPush/Create/components/MessageSection.test.js +0 -268
  182. package/v2Containers/WebPush/Create/components/NotificationTitleSection.js +0 -87
  183. package/v2Containers/WebPush/Create/components/NotificationTitleSection.test.js +0 -210
  184. package/v2Containers/WebPush/Create/components/TemplateNameSection.js +0 -54
  185. package/v2Containers/WebPush/Create/components/TemplateNameSection.test.js +0 -143
  186. package/v2Containers/WebPush/Create/components/__snapshots__/ButtonsLinksSection.test.js.snap +0 -86
  187. package/v2Containers/WebPush/Create/components/__snapshots__/FormActions.test.js.snap +0 -16
  188. package/v2Containers/WebPush/Create/components/__snapshots__/MediaSection.test.js.snap +0 -41
  189. package/v2Containers/WebPush/Create/components/__snapshots__/MessageSection.test.js.snap +0 -54
  190. package/v2Containers/WebPush/Create/components/__snapshots__/NotificationTitleSection.test.js.snap +0 -37
  191. package/v2Containers/WebPush/Create/components/__snapshots__/TemplateNameSection.test.js.snap +0 -21
  192. package/v2Containers/WebPush/Create/components/_buttons.scss +0 -246
  193. package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +0 -554
  194. package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +0 -607
  195. package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +0 -633
  196. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +0 -666
  197. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +0 -74
  198. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +0 -78
  199. package/v2Containers/WebPush/Create/hooks/useButtonManagement.js +0 -138
  200. package/v2Containers/WebPush/Create/hooks/useButtonManagement.test.js +0 -406
  201. package/v2Containers/WebPush/Create/hooks/useCharacterCount.js +0 -30
  202. package/v2Containers/WebPush/Create/hooks/useCharacterCount.test.js +0 -151
  203. package/v2Containers/WebPush/Create/hooks/useImageUpload.js +0 -104
  204. package/v2Containers/WebPush/Create/hooks/useImageUpload.test.js +0 -538
  205. package/v2Containers/WebPush/Create/hooks/useTagManagement.js +0 -122
  206. package/v2Containers/WebPush/Create/hooks/useTagManagement.test.js +0 -633
  207. package/v2Containers/WebPush/Create/index.js +0 -1148
  208. package/v2Containers/WebPush/Create/index.scss +0 -134
  209. package/v2Containers/WebPush/Create/messages.js +0 -211
  210. package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +0 -228
  211. package/v2Containers/WebPush/Create/preview/NotificationContainer.js +0 -294
  212. package/v2Containers/WebPush/Create/preview/PreviewContent.js +0 -90
  213. package/v2Containers/WebPush/Create/preview/PreviewControls.js +0 -305
  214. package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +0 -25
  215. package/v2Containers/WebPush/Create/preview/WebPushPreview.js +0 -155
  216. package/v2Containers/WebPush/Create/preview/assets/Light.svg +0 -53
  217. package/v2Containers/WebPush/Create/preview/assets/Top.svg +0 -5
  218. package/v2Containers/WebPush/Create/preview/assets/android-arrow-down.svg +0 -9
  219. package/v2Containers/WebPush/Create/preview/assets/android-arrow-up.svg +0 -9
  220. package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
  221. package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
  222. package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +0 -106
  223. package/v2Containers/WebPush/Create/preview/assets/iOS.svg +0 -26
  224. package/v2Containers/WebPush/Create/preview/assets/macos-arrow-down-icon.svg +0 -9
  225. package/v2Containers/WebPush/Create/preview/assets/macos-triple-dot-icon.svg +0 -9
  226. package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +0 -18
  227. package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +0 -29
  228. package/v2Containers/WebPush/Create/preview/assets/windows-close-icon.svg +0 -9
  229. package/v2Containers/WebPush/Create/preview/assets/windows-triple-dot-icon.svg +0 -9
  230. package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +0 -51
  231. package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +0 -145
  232. package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +0 -45
  233. package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +0 -68
  234. package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +0 -61
  235. package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +0 -99
  236. package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +0 -733
  237. package/v2Containers/WebPush/Create/preview/components/tests/WindowsChromeExpanded.test.js +0 -571
  238. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +0 -85
  239. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/WindowsChromeExpanded.test.js.snap +0 -81
  240. package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +0 -50
  241. package/v2Containers/WebPush/Create/preview/constants.js +0 -637
  242. package/v2Containers/WebPush/Create/preview/notification-container.scss +0 -79
  243. package/v2Containers/WebPush/Create/preview/preview.scss +0 -358
  244. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +0 -370
  245. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +0 -12
  246. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +0 -12
  247. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +0 -12
  248. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +0 -47
  249. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +0 -11
  250. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +0 -11
  251. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +0 -11
  252. package/v2Containers/WebPush/Create/preview/styles/_base.scss +0 -207
  253. package/v2Containers/WebPush/Create/preview/styles/_ios.scss +0 -153
  254. package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +0 -107
  255. package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +0 -101
  256. package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +0 -229
  257. package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +0 -909
  258. package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +0 -1081
  259. package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +0 -723
  260. package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +0 -1327
  261. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +0 -131
  262. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +0 -112
  263. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +0 -144
  264. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +0 -129
  265. package/v2Containers/WebPush/Create/utils/payloadBuilder.js +0 -96
  266. package/v2Containers/WebPush/Create/utils/payloadBuilder.test.js +0 -396
  267. package/v2Containers/WebPush/Create/utils/previewUtils.js +0 -89
  268. package/v2Containers/WebPush/Create/utils/urlValidation.js +0 -115
  269. package/v2Containers/WebPush/Create/utils/urlValidation.test.js +0 -449
  270. package/v2Containers/WebPush/Create/utils/validation.js +0 -75
  271. package/v2Containers/WebPush/Create/utils/validation.test.js +0 -283
  272. package/v2Containers/WebPush/actions.js +0 -60
  273. package/v2Containers/WebPush/constants.js +0 -132
  274. package/v2Containers/WebPush/index.js +0 -2
  275. package/v2Containers/WebPush/reducer.js +0 -104
  276. package/v2Containers/WebPush/sagas.js +0 -119
  277. package/v2Containers/WebPush/selectors.js +0 -65
  278. package/v2Containers/WebPush/tests/reducer.test.js +0 -863
  279. package/v2Containers/WebPush/tests/sagas.test.js +0 -566
  280. package/v2Containers/WebPush/tests/selectors.test.js +0 -960
@@ -1,633 +0,0 @@
1
- import { renderHook } from '@testing-library/react';
2
- import { act } from 'react';
3
- import { useTagManagement } from './useTagManagement';
4
- import { TAG, EMBEDDED, DEFAULT, FULL, ALL, LIBRARY } from '../../../Whatsapp/constants';
5
- import { SMS } from '../../../CreativesContainer/constants';
6
-
7
- describe('useTagManagement', () => {
8
- const mockFetchSchemaForEntity = jest.fn();
9
- const mockGlobalActions = {
10
- fetchSchemaForEntity: mockFetchSchemaForEntity,
11
- };
12
-
13
- const defaultLocation = {
14
- query: {
15
- type: '',
16
- module: '',
17
- },
18
- };
19
-
20
- const defaultMetaEntities = {
21
- tags: {
22
- standard: [
23
- { id: 1, name: 'Tag 1' },
24
- { id: 2, name: 'Tag 2' },
25
- ],
26
- },
27
- };
28
-
29
- beforeEach(() => {
30
- jest.clearAllMocks();
31
- });
32
-
33
- describe('Initialization', () => {
34
- it('should initialize with empty tags array', () => {
35
- const { result } = renderHook(() =>
36
- useTagManagement({
37
- location: defaultLocation,
38
- globalActions: mockGlobalActions,
39
- metaEntities: null,
40
- })
41
- );
42
-
43
- expect(result.current.tags).toEqual([]);
44
- });
45
-
46
- it('should initialize with tags from metaEntities', () => {
47
- const { result } = renderHook(() =>
48
- useTagManagement({
49
- location: defaultLocation,
50
- globalActions: mockGlobalActions,
51
- metaEntities: defaultMetaEntities,
52
- })
53
- );
54
-
55
- expect(result.current.tags).toEqual(defaultMetaEntities.tags.standard);
56
- });
57
- });
58
-
59
- describe('Tag Fetching', () => {
60
- it('should fetch tags on mount with default context', () => {
61
- renderHook(() =>
62
- useTagManagement({
63
- location: defaultLocation,
64
- globalActions: mockGlobalActions,
65
- metaEntities: null,
66
- })
67
- );
68
-
69
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
70
- layout: SMS,
71
- type: TAG,
72
- context: DEFAULT,
73
- embedded: FULL,
74
- });
75
- });
76
-
77
- it('should fetch tags with embedded context when type is EMBEDDED', () => {
78
- const location = {
79
- query: {
80
- type: EMBEDDED,
81
- module: 'test-module',
82
- },
83
- };
84
-
85
- renderHook(() =>
86
- useTagManagement({
87
- location,
88
- globalActions: mockGlobalActions,
89
- metaEntities: null,
90
- })
91
- );
92
-
93
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
94
- layout: SMS,
95
- type: TAG,
96
- context: 'test-module',
97
- embedded: EMBEDDED,
98
- });
99
- });
100
-
101
- it('should use getDefaultTags as context when provided', () => {
102
- const getDefaultTags = 'custom-context';
103
-
104
- renderHook(() =>
105
- useTagManagement({
106
- location: defaultLocation,
107
- globalActions: mockGlobalActions,
108
- metaEntities: null,
109
- getDefaultTags,
110
- })
111
- );
112
-
113
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
114
- layout: SMS,
115
- type: TAG,
116
- context: 'custom-context',
117
- embedded: FULL,
118
- });
119
- });
120
-
121
- it('should not fetch if globalActions.fetchSchemaForEntity is missing', () => {
122
- renderHook(() =>
123
- useTagManagement({
124
- location: defaultLocation,
125
- globalActions: {},
126
- metaEntities: null,
127
- })
128
- );
129
-
130
- expect(mockFetchSchemaForEntity).not.toHaveBeenCalled();
131
- });
132
-
133
- it('should not fetch again if tagFetchKey has not changed', () => {
134
- const { rerender } = renderHook(
135
- ({ location, globalActions }) =>
136
- useTagManagement({
137
- location,
138
- globalActions,
139
- metaEntities: null,
140
- }),
141
- {
142
- initialProps: {
143
- location: defaultLocation,
144
- globalActions: mockGlobalActions,
145
- },
146
- }
147
- );
148
-
149
- expect(mockFetchSchemaForEntity).toHaveBeenCalledTimes(1);
150
-
151
- rerender({
152
- location: defaultLocation,
153
- globalActions: mockGlobalActions,
154
- });
155
-
156
- expect(mockFetchSchemaForEntity).toHaveBeenCalledTimes(1);
157
- });
158
-
159
- it('should fetch again when location type changes', () => {
160
- const { rerender } = renderHook(
161
- ({ location, globalActions }) =>
162
- useTagManagement({
163
- location,
164
- globalActions: mockGlobalActions,
165
- metaEntities: null,
166
- }),
167
- {
168
- initialProps: {
169
- location: defaultLocation,
170
- globalActions: mockGlobalActions,
171
- },
172
- }
173
- );
174
-
175
- expect(mockFetchSchemaForEntity).toHaveBeenCalledTimes(1);
176
-
177
- const newLocation = {
178
- query: {
179
- type: EMBEDDED,
180
- module: 'test',
181
- },
182
- };
183
-
184
- rerender({
185
- location: newLocation,
186
- globalActions: mockGlobalActions,
187
- });
188
-
189
- expect(mockFetchSchemaForEntity).toHaveBeenCalledTimes(2);
190
- });
191
-
192
- it('should fetch again when getDefaultTags changes', () => {
193
- const { rerender } = renderHook(
194
- ({ getDefaultTags, globalActions }) =>
195
- useTagManagement({
196
- location: defaultLocation,
197
- globalActions,
198
- metaEntities: null,
199
- getDefaultTags,
200
- }),
201
- {
202
- initialProps: {
203
- getDefaultTags: 'context1',
204
- globalActions: mockGlobalActions,
205
- },
206
- }
207
- );
208
-
209
- expect(mockFetchSchemaForEntity).toHaveBeenCalledTimes(1);
210
-
211
- rerender({
212
- getDefaultTags: 'context2',
213
- globalActions: mockGlobalActions,
214
- });
215
-
216
- expect(mockFetchSchemaForEntity).toHaveBeenCalledTimes(2);
217
- });
218
- });
219
-
220
- describe('Tag Updates from metaEntities', () => {
221
- it('should update tags when metaEntities changes', () => {
222
- const { result, rerender } = renderHook(
223
- ({ metaEntities }) =>
224
- useTagManagement({
225
- location: defaultLocation,
226
- globalActions: mockGlobalActions,
227
- metaEntities,
228
- }),
229
- {
230
- initialProps: {
231
- metaEntities: null,
232
- },
233
- }
234
- );
235
-
236
- expect(result.current.tags).toEqual([]);
237
-
238
- rerender({ metaEntities: defaultMetaEntities });
239
-
240
- expect(result.current.tags).toEqual(defaultMetaEntities.tags.standard);
241
- });
242
-
243
- it('should use supportedTags when embedded in library mode without getDefaultTags', () => {
244
- // Define supportedTags outside to maintain stable reference
245
- const supportedTagsArray = [
246
- { id: 3, name: 'Supported Tag 1' },
247
- { id: 4, name: 'Supported Tag 2' },
248
- ];
249
-
250
- const location = {
251
- query: {
252
- type: EMBEDDED,
253
- module: LIBRARY,
254
- },
255
- };
256
-
257
- const { result } = renderHook(
258
- ({ supportedTags }) =>
259
- useTagManagement({
260
- location,
261
- globalActions: mockGlobalActions,
262
- metaEntities: defaultMetaEntities,
263
- supportedTags,
264
- }),
265
- {
266
- initialProps: {
267
- supportedTags: supportedTagsArray,
268
- },
269
- }
270
- );
271
-
272
- expect(result.current.tags).toEqual(supportedTagsArray);
273
- });
274
-
275
- it('should use metaEntities tags when embedded in library mode with getDefaultTags', () => {
276
- // Define supportedTags outside to maintain stable reference
277
- const supportedTagsArray = [
278
- { id: 3, name: 'Supported Tag 1' },
279
- ];
280
-
281
- const location = {
282
- query: {
283
- type: EMBEDDED,
284
- module: LIBRARY,
285
- },
286
- };
287
-
288
- const { result } = renderHook(
289
- ({ supportedTags }) =>
290
- useTagManagement({
291
- location,
292
- globalActions: mockGlobalActions,
293
- metaEntities: defaultMetaEntities,
294
- supportedTags,
295
- getDefaultTags: 'custom',
296
- }),
297
- {
298
- initialProps: {
299
- supportedTags: supportedTagsArray,
300
- },
301
- }
302
- );
303
-
304
- expect(result.current.tags).toEqual(defaultMetaEntities.tags.standard);
305
- });
306
-
307
- it('should handle empty metaEntities.tags.standard', () => {
308
- const emptyMetaEntities = {
309
- tags: {
310
- standard: [],
311
- },
312
- };
313
-
314
- const { result } = renderHook(() =>
315
- useTagManagement({
316
- location: defaultLocation,
317
- globalActions: mockGlobalActions,
318
- metaEntities: emptyMetaEntities,
319
- })
320
- );
321
-
322
- expect(result.current.tags).toEqual([]);
323
- });
324
-
325
- it('should handle missing metaEntities.tags.standard', () => {
326
- const metaEntitiesWithoutTags = {
327
- tags: {},
328
- };
329
-
330
- const { result } = renderHook(() =>
331
- useTagManagement({
332
- location: defaultLocation,
333
- globalActions: mockGlobalActions,
334
- metaEntities: metaEntitiesWithoutTags,
335
- })
336
- );
337
-
338
- expect(result.current.tags).toEqual([]);
339
- });
340
-
341
- it('should handle null metaEntities', () => {
342
- const { result } = renderHook(() =>
343
- useTagManagement({
344
- location: defaultLocation,
345
- globalActions: mockGlobalActions,
346
- metaEntities: null,
347
- })
348
- );
349
-
350
- expect(result.current.tags).toEqual([]);
351
- });
352
- });
353
-
354
- describe('handleOnTagsContextChange', () => {
355
- it('should fetch tags with new context', () => {
356
- const { result } = renderHook(() =>
357
- useTagManagement({
358
- location: defaultLocation,
359
- globalActions: mockGlobalActions,
360
- metaEntities: defaultMetaEntities,
361
- })
362
- );
363
-
364
- act(() => {
365
- result.current.handleOnTagsContextChange('new-context');
366
- });
367
-
368
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
369
- layout: SMS,
370
- type: TAG,
371
- context: 'new-context',
372
- embedded: FULL,
373
- });
374
- });
375
-
376
- it('should use DEFAULT context when data is ALL', () => {
377
- const { result } = renderHook(() =>
378
- useTagManagement({
379
- location: defaultLocation,
380
- globalActions: mockGlobalActions,
381
- metaEntities: defaultMetaEntities,
382
- })
383
- );
384
-
385
- act(() => {
386
- result.current.handleOnTagsContextChange(ALL);
387
- });
388
-
389
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
390
- layout: SMS,
391
- type: TAG,
392
- context: DEFAULT,
393
- embedded: FULL,
394
- });
395
- });
396
-
397
- it('should use DEFAULT context when data is "all" (case insensitive)', () => {
398
- const { result } = renderHook(() =>
399
- useTagManagement({
400
- location: defaultLocation,
401
- globalActions: mockGlobalActions,
402
- metaEntities: defaultMetaEntities,
403
- })
404
- );
405
-
406
- act(() => {
407
- result.current.handleOnTagsContextChange('ALL');
408
- });
409
-
410
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
411
- layout: SMS,
412
- type: TAG,
413
- context: DEFAULT,
414
- embedded: FULL,
415
- });
416
- });
417
-
418
- it('should use embedded context when location type is EMBEDDED', () => {
419
- const location = {
420
- query: {
421
- type: EMBEDDED,
422
- module: 'test-module',
423
- },
424
- };
425
-
426
- const { result } = renderHook(() =>
427
- useTagManagement({
428
- location,
429
- globalActions: mockGlobalActions,
430
- metaEntities: defaultMetaEntities,
431
- })
432
- );
433
-
434
- act(() => {
435
- result.current.handleOnTagsContextChange('new-context');
436
- });
437
-
438
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
439
- layout: SMS,
440
- type: TAG,
441
- context: 'new-context',
442
- embedded: EMBEDDED,
443
- });
444
- });
445
-
446
- it('should use getDefaultTags as context when provided', () => {
447
- const getDefaultTags = 'custom-context';
448
-
449
- const { result } = renderHook(() =>
450
- useTagManagement({
451
- location: defaultLocation,
452
- globalActions: mockGlobalActions,
453
- metaEntities: defaultMetaEntities,
454
- getDefaultTags,
455
- })
456
- );
457
-
458
- act(() => {
459
- result.current.handleOnTagsContextChange('new-context');
460
- });
461
-
462
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
463
- layout: SMS,
464
- type: TAG,
465
- context: 'custom-context',
466
- embedded: FULL,
467
- });
468
- });
469
-
470
- it('should handle null data', () => {
471
- const { result } = renderHook(() =>
472
- useTagManagement({
473
- location: defaultLocation,
474
- globalActions: mockGlobalActions,
475
- metaEntities: defaultMetaEntities,
476
- })
477
- );
478
-
479
- act(() => {
480
- result.current.handleOnTagsContextChange(null);
481
- });
482
-
483
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
484
- layout: SMS,
485
- type: TAG,
486
- context: DEFAULT,
487
- embedded: FULL,
488
- });
489
- });
490
-
491
- it('should handle empty string data', () => {
492
- const { result } = renderHook(() =>
493
- useTagManagement({
494
- location: defaultLocation,
495
- globalActions: mockGlobalActions,
496
- metaEntities: defaultMetaEntities,
497
- })
498
- );
499
-
500
- act(() => {
501
- result.current.handleOnTagsContextChange('');
502
- });
503
-
504
- expect(mockFetchSchemaForEntity).toHaveBeenCalledWith({
505
- layout: SMS,
506
- type: TAG,
507
- context: DEFAULT,
508
- embedded: FULL,
509
- });
510
- });
511
-
512
- it('should not throw when globalActions is missing', () => {
513
- const { result } = renderHook(() =>
514
- useTagManagement({
515
- location: defaultLocation,
516
- globalActions: {},
517
- metaEntities: defaultMetaEntities,
518
- })
519
- );
520
-
521
- expect(() => {
522
- act(() => {
523
- result.current.handleOnTagsContextChange('context');
524
- });
525
- }).not.toThrow();
526
- });
527
- });
528
-
529
- describe('validationConfig', () => {
530
- it('should return validation config with tags', () => {
531
- const injectedTags = [{ id: 5, name: 'Injected Tag' }];
532
- const eventContextTags = [{ id: 6, name: 'Event Tag' }];
533
-
534
- const { result } = renderHook(() =>
535
- useTagManagement({
536
- location: defaultLocation,
537
- globalActions: mockGlobalActions,
538
- metaEntities: defaultMetaEntities,
539
- injectedTags,
540
- eventContextTags,
541
- getDefaultTags: 'custom',
542
- })
543
- );
544
-
545
- expect(result.current.validationConfig).toEqual({
546
- tagsParam: defaultMetaEntities.tags.standard,
547
- injectedTagsParams: injectedTags,
548
- location: defaultLocation,
549
- tagModule: 'custom',
550
- eventContextTags,
551
- });
552
- });
553
-
554
- it('should update validation config when tags change', () => {
555
- const { result, rerender } = renderHook(
556
- ({ metaEntities }) =>
557
- useTagManagement({
558
- location: defaultLocation,
559
- globalActions: mockGlobalActions,
560
- metaEntities,
561
- }),
562
- {
563
- initialProps: {
564
- metaEntities: defaultMetaEntities,
565
- },
566
- }
567
- );
568
-
569
- const firstConfig = result.current.validationConfig;
570
-
571
- const newMetaEntities = {
572
- tags: {
573
- standard: [{ id: 7, name: 'New Tag' }],
574
- },
575
- };
576
-
577
- rerender({ metaEntities: newMetaEntities });
578
-
579
- expect(result.current.validationConfig.tagsParam).toEqual(newMetaEntities.tags.standard);
580
- expect(result.current.validationConfig).not.toBe(firstConfig);
581
- });
582
-
583
- it('should memoize validation config when dependencies do not change', () => {
584
- const { result, rerender } = renderHook(
585
- ({ metaEntities }) =>
586
- useTagManagement({
587
- location: defaultLocation,
588
- globalActions: mockGlobalActions,
589
- metaEntities,
590
- }),
591
- {
592
- initialProps: {
593
- metaEntities: defaultMetaEntities,
594
- },
595
- }
596
- );
597
-
598
- const firstConfig = result.current.validationConfig;
599
-
600
- rerender({ metaEntities: defaultMetaEntities });
601
-
602
- // Verify memoization by checking reference equality
603
- expect(result.current.validationConfig).toBe(firstConfig);
604
- });
605
- });
606
-
607
- describe('Edge Cases', () => {
608
- it('should handle location without query', () => {
609
- const { result } = renderHook(() =>
610
- useTagManagement({
611
- location: {},
612
- globalActions: mockGlobalActions,
613
- metaEntities: defaultMetaEntities,
614
- })
615
- );
616
-
617
- expect(result.current.tags).toEqual(defaultMetaEntities.tags.standard);
618
- });
619
-
620
- it('should handle location as null', () => {
621
- const { result } = renderHook(() =>
622
- useTagManagement({
623
- location: null,
624
- globalActions: mockGlobalActions,
625
- metaEntities: defaultMetaEntities,
626
- })
627
- );
628
-
629
- expect(result.current.tags).toEqual(defaultMetaEntities.tags.standard);
630
- });
631
- });
632
- });
633
-