@capillarytech/creatives-library 8.0.255-alpha.4 → 8.0.255

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 (278) hide show
  1. package/assets/Android.png +0 -0
  2. package/assets/iOS.png +0 -0
  3. package/constants/unified.js +2 -2
  4. package/initialReducer.js +2 -0
  5. package/package.json +1 -1
  6. package/services/api.js +10 -5
  7. package/services/tests/api.test.js +34 -0
  8. package/translations/en.json +3 -4
  9. package/utils/common.js +5 -6
  10. package/utils/commonUtils.js +28 -5
  11. package/utils/tests/commonUtil.test.js +224 -0
  12. package/utils/tests/transformerUtils.test.js +0 -297
  13. package/utils/transformTemplateConfig.js +0 -10
  14. package/utils/transformerUtils.js +0 -40
  15. package/v2Components/CapDeviceContent/index.js +61 -56
  16. package/v2Components/CapImageUpload/constants.js +0 -2
  17. package/v2Components/CapImageUpload/index.js +16 -65
  18. package/v2Components/CapImageUpload/index.scss +1 -4
  19. package/v2Components/CapImageUpload/messages.js +1 -5
  20. package/v2Components/CapTagList/index.js +6 -1
  21. package/v2Components/CapTagListWithInput/index.js +5 -1
  22. package/v2Components/CapTagListWithInput/messages.js +1 -1
  23. package/v2Components/CapWhatsappCTA/tests/index.test.js +5 -0
  24. package/v2Components/ErrorInfoNote/constants.js +1 -0
  25. package/v2Components/ErrorInfoNote/index.js +457 -72
  26. package/v2Components/ErrorInfoNote/messages.js +36 -6
  27. package/v2Components/ErrorInfoNote/style.scss +282 -6
  28. package/v2Components/FormBuilder/tests/index.test.js +13 -4
  29. package/v2Components/HtmlEditor/HTMLEditor.js +547 -94
  30. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +874 -0
  31. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +1441 -133
  32. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +27 -16
  33. package/v2Components/HtmlEditor/_htmlEditor.scss +108 -45
  34. package/v2Components/HtmlEditor/_index.lazy.scss +0 -1
  35. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +23 -102
  36. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +148 -140
  37. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +2 -1
  38. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  39. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +9 -0
  40. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +4 -4
  41. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +22 -0
  42. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +4 -7
  43. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +35 -45
  44. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +1 -3
  45. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  46. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +7 -6
  47. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +3 -6
  48. package/v2Components/HtmlEditor/components/PreviewPane/index.js +22 -43
  49. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  50. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/_validationErrorDisplay.scss +1 -0
  51. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +49 -31
  52. package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +50 -34
  53. package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +6 -0
  54. package/v2Components/HtmlEditor/components/ValidationPanel/index.js +70 -41
  55. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +255 -0
  56. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +364 -0
  57. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +51 -0
  58. package/v2Components/HtmlEditor/constants.js +42 -20
  59. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +373 -16
  60. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +103 -0
  61. package/v2Components/HtmlEditor/hooks/useEditorContent.js +5 -2
  62. package/v2Components/HtmlEditor/hooks/useInAppContent.js +88 -146
  63. package/v2Components/HtmlEditor/hooks/useValidation.js +189 -53
  64. package/v2Components/HtmlEditor/index.js +1 -1
  65. package/v2Components/HtmlEditor/messages.js +92 -94
  66. package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +94 -45
  67. package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +134 -0
  68. package/v2Components/HtmlEditor/utils/contentSanitizer.js +40 -41
  69. package/v2Components/HtmlEditor/utils/htmlValidator.js +71 -72
  70. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +134 -102
  71. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +23 -25
  72. package/v2Components/HtmlEditor/utils/validationAdapter.js +66 -41
  73. package/v2Components/HtmlEditor/utils/validationConstants.js +40 -0
  74. package/v2Components/MobilePushPreviewV2/index.js +32 -7
  75. package/v2Components/TemplatePreview/_templatePreview.scss +55 -24
  76. package/v2Components/TemplatePreview/index.js +47 -32
  77. package/v2Components/TemplatePreview/messages.js +4 -0
  78. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +1 -0
  79. package/v2Containers/App/constants.js +0 -5
  80. package/v2Containers/BeeEditor/index.js +172 -90
  81. package/v2Containers/BeePopupEditor/_beePopupEditor.scss +14 -0
  82. package/v2Containers/BeePopupEditor/constants.js +10 -0
  83. package/v2Containers/BeePopupEditor/index.js +194 -0
  84. package/v2Containers/BeePopupEditor/tests/index.test.js +627 -0
  85. package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +3 -4
  86. package/v2Containers/CreativesContainer/SlideBoxContent.js +129 -107
  87. package/v2Containers/CreativesContainer/SlideBoxFooter.js +163 -13
  88. package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -2
  89. package/v2Containers/CreativesContainer/constants.js +1 -3
  90. package/v2Containers/CreativesContainer/index.js +239 -214
  91. package/v2Containers/CreativesContainer/messages.js +8 -4
  92. package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +0 -210
  93. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +11 -2
  94. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +38 -354
  95. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +106 -0
  96. package/v2Containers/Email/actions.js +7 -0
  97. package/v2Containers/Email/constants.js +5 -1
  98. package/v2Containers/Email/index.js +234 -29
  99. package/v2Containers/Email/messages.js +32 -0
  100. package/v2Containers/Email/reducer.js +12 -1
  101. package/v2Containers/Email/sagas.js +61 -7
  102. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +2 -0
  103. package/v2Containers/Email/tests/reducer.test.js +46 -0
  104. package/v2Containers/Email/tests/sagas.test.js +320 -29
  105. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +1285 -0
  106. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +211 -21
  107. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +40 -74
  108. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +1880 -0
  109. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +520 -0
  110. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +2 -67
  111. package/v2Containers/EmailWrapper/constants.js +2 -0
  112. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +629 -77
  113. package/v2Containers/EmailWrapper/index.js +103 -23
  114. package/v2Containers/EmailWrapper/messages.js +65 -1
  115. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +643 -0
  116. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +594 -77
  117. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +376 -0
  118. package/v2Containers/InApp/__tests__/sagas.test.js +363 -0
  119. package/v2Containers/InApp/actions.js +7 -0
  120. package/v2Containers/InApp/constants.js +20 -4
  121. package/v2Containers/InApp/index.js +802 -359
  122. package/v2Containers/InApp/index.scss +4 -3
  123. package/v2Containers/InApp/messages.js +7 -3
  124. package/v2Containers/InApp/reducer.js +21 -3
  125. package/v2Containers/InApp/sagas.js +29 -9
  126. package/v2Containers/InApp/selectors.js +25 -5
  127. package/v2Containers/InApp/tests/index.test.js +154 -50
  128. package/v2Containers/InApp/tests/reducer.test.js +34 -0
  129. package/v2Containers/InApp/tests/sagas.test.js +61 -9
  130. package/v2Containers/InApp/tests/selectors.test.js +612 -0
  131. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +151 -0
  132. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +267 -0
  133. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +23 -0
  134. package/v2Containers/InAppWrapper/constants.js +16 -0
  135. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +473 -0
  136. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +198 -0
  137. package/v2Containers/InAppWrapper/index.js +148 -0
  138. package/v2Containers/InAppWrapper/messages.js +49 -0
  139. package/v2Containers/InappAdvance/index.js +1099 -0
  140. package/v2Containers/InappAdvance/index.scss +10 -0
  141. package/v2Containers/InappAdvance/tests/index.test.js +448 -0
  142. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +15 -36
  143. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +8 -8
  144. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +77 -100
  145. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +63 -72
  146. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +190 -250
  147. package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +12 -16
  148. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +40 -48
  149. package/v2Containers/TagList/index.js +62 -19
  150. package/v2Containers/Templates/ChannelTypeIllustration.js +1 -13
  151. package/v2Containers/Templates/_templates.scss +56 -202
  152. package/v2Containers/Templates/actions.js +1 -2
  153. package/v2Containers/Templates/constants.js +0 -1
  154. package/v2Containers/Templates/index.js +123 -278
  155. package/v2Containers/Templates/messages.js +4 -24
  156. package/v2Containers/Templates/reducer.js +0 -2
  157. package/v2Containers/Templates/tests/index.test.js +0 -10
  158. package/v2Containers/TemplatesV2/index.js +7 -15
  159. package/v2Containers/TemplatesV2/messages.js +0 -4
  160. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +768 -1272
  161. package/utils/imageUrlUpload.js +0 -141
  162. package/v2Components/CapImageUrlUpload/constants.js +0 -26
  163. package/v2Components/CapImageUrlUpload/index.js +0 -365
  164. package/v2Components/CapImageUrlUpload/index.scss +0 -35
  165. package/v2Components/CapImageUrlUpload/messages.js +0 -47
  166. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +0 -152
  167. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +0 -214
  168. package/v2Containers/WebPush/Create/components/BrandIconSection.js +0 -108
  169. package/v2Containers/WebPush/Create/components/ButtonForm.js +0 -172
  170. package/v2Containers/WebPush/Create/components/ButtonItem.js +0 -101
  171. package/v2Containers/WebPush/Create/components/ButtonList.js +0 -145
  172. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.js +0 -164
  173. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.test.js +0 -463
  174. package/v2Containers/WebPush/Create/components/FormActions.js +0 -54
  175. package/v2Containers/WebPush/Create/components/FormActions.test.js +0 -163
  176. package/v2Containers/WebPush/Create/components/MediaSection.js +0 -142
  177. package/v2Containers/WebPush/Create/components/MediaSection.test.js +0 -341
  178. package/v2Containers/WebPush/Create/components/MessageSection.js +0 -103
  179. package/v2Containers/WebPush/Create/components/MessageSection.test.js +0 -268
  180. package/v2Containers/WebPush/Create/components/NotificationTitleSection.js +0 -87
  181. package/v2Containers/WebPush/Create/components/NotificationTitleSection.test.js +0 -210
  182. package/v2Containers/WebPush/Create/components/TemplateNameSection.js +0 -54
  183. package/v2Containers/WebPush/Create/components/TemplateNameSection.test.js +0 -143
  184. package/v2Containers/WebPush/Create/components/__snapshots__/ButtonsLinksSection.test.js.snap +0 -86
  185. package/v2Containers/WebPush/Create/components/__snapshots__/FormActions.test.js.snap +0 -16
  186. package/v2Containers/WebPush/Create/components/__snapshots__/MediaSection.test.js.snap +0 -41
  187. package/v2Containers/WebPush/Create/components/__snapshots__/MessageSection.test.js.snap +0 -54
  188. package/v2Containers/WebPush/Create/components/__snapshots__/NotificationTitleSection.test.js.snap +0 -37
  189. package/v2Containers/WebPush/Create/components/__snapshots__/TemplateNameSection.test.js.snap +0 -21
  190. package/v2Containers/WebPush/Create/components/_buttons.scss +0 -246
  191. package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +0 -554
  192. package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +0 -607
  193. package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +0 -633
  194. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +0 -666
  195. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +0 -74
  196. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +0 -78
  197. package/v2Containers/WebPush/Create/hooks/useButtonManagement.js +0 -138
  198. package/v2Containers/WebPush/Create/hooks/useButtonManagement.test.js +0 -406
  199. package/v2Containers/WebPush/Create/hooks/useCharacterCount.js +0 -30
  200. package/v2Containers/WebPush/Create/hooks/useCharacterCount.test.js +0 -151
  201. package/v2Containers/WebPush/Create/hooks/useImageUpload.js +0 -104
  202. package/v2Containers/WebPush/Create/hooks/useImageUpload.test.js +0 -538
  203. package/v2Containers/WebPush/Create/hooks/useTagManagement.js +0 -122
  204. package/v2Containers/WebPush/Create/hooks/useTagManagement.test.js +0 -633
  205. package/v2Containers/WebPush/Create/index.js +0 -1148
  206. package/v2Containers/WebPush/Create/index.scss +0 -134
  207. package/v2Containers/WebPush/Create/messages.js +0 -203
  208. package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +0 -228
  209. package/v2Containers/WebPush/Create/preview/NotificationContainer.js +0 -294
  210. package/v2Containers/WebPush/Create/preview/PreviewContent.js +0 -90
  211. package/v2Containers/WebPush/Create/preview/PreviewControls.js +0 -305
  212. package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +0 -23
  213. package/v2Containers/WebPush/Create/preview/WebPushPreview.js +0 -155
  214. package/v2Containers/WebPush/Create/preview/assets/Light.svg +0 -53
  215. package/v2Containers/WebPush/Create/preview/assets/Top.svg +0 -5
  216. package/v2Containers/WebPush/Create/preview/assets/android-arrow-down.svg +0 -9
  217. package/v2Containers/WebPush/Create/preview/assets/android-arrow-up.svg +0 -9
  218. package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
  219. package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
  220. package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +0 -106
  221. package/v2Containers/WebPush/Create/preview/assets/iOS.svg +0 -26
  222. package/v2Containers/WebPush/Create/preview/assets/macos-arrow-down-icon.svg +0 -9
  223. package/v2Containers/WebPush/Create/preview/assets/macos-triple-dot-icon.svg +0 -9
  224. package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +0 -18
  225. package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +0 -29
  226. package/v2Containers/WebPush/Create/preview/assets/windows-close-icon.svg +0 -9
  227. package/v2Containers/WebPush/Create/preview/assets/windows-triple-dot-icon.svg +0 -9
  228. package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +0 -47
  229. package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +0 -141
  230. package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +0 -45
  231. package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +0 -68
  232. package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +0 -61
  233. package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +0 -99
  234. package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +0 -733
  235. package/v2Containers/WebPush/Create/preview/components/tests/WindowsChromeExpanded.test.js +0 -571
  236. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +0 -81
  237. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/WindowsChromeExpanded.test.js.snap +0 -81
  238. package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +0 -50
  239. package/v2Containers/WebPush/Create/preview/constants.js +0 -637
  240. package/v2Containers/WebPush/Create/preview/notification-container.scss +0 -79
  241. package/v2Containers/WebPush/Create/preview/preview.scss +0 -351
  242. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +0 -370
  243. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +0 -12
  244. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +0 -12
  245. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +0 -12
  246. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +0 -47
  247. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +0 -11
  248. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +0 -11
  249. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +0 -11
  250. package/v2Containers/WebPush/Create/preview/styles/_base.scss +0 -207
  251. package/v2Containers/WebPush/Create/preview/styles/_ios.scss +0 -153
  252. package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +0 -107
  253. package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +0 -101
  254. package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +0 -229
  255. package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +0 -909
  256. package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +0 -1081
  257. package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +0 -723
  258. package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +0 -1327
  259. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +0 -131
  260. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +0 -112
  261. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +0 -144
  262. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +0 -129
  263. package/v2Containers/WebPush/Create/utils/payloadBuilder.js +0 -96
  264. package/v2Containers/WebPush/Create/utils/payloadBuilder.test.js +0 -396
  265. package/v2Containers/WebPush/Create/utils/previewUtils.js +0 -89
  266. package/v2Containers/WebPush/Create/utils/urlValidation.js +0 -115
  267. package/v2Containers/WebPush/Create/utils/urlValidation.test.js +0 -449
  268. package/v2Containers/WebPush/Create/utils/validation.js +0 -75
  269. package/v2Containers/WebPush/Create/utils/validation.test.js +0 -283
  270. package/v2Containers/WebPush/actions.js +0 -60
  271. package/v2Containers/WebPush/constants.js +0 -132
  272. package/v2Containers/WebPush/index.js +0 -2
  273. package/v2Containers/WebPush/reducer.js +0 -104
  274. package/v2Containers/WebPush/sagas.js +0 -119
  275. package/v2Containers/WebPush/selectors.js +0 -65
  276. package/v2Containers/WebPush/tests/reducer.test.js +0 -863
  277. package/v2Containers/WebPush/tests/sagas.test.js +0 -566
  278. package/v2Containers/WebPush/tests/selectors.test.js +0 -960
@@ -40,6 +40,7 @@ export class TagList extends React.Component { // eslint-disable-line react/pref
40
40
  tags: [],
41
41
  tagsError: false,
42
42
  currentContext: null, // Track current context to detect changes
43
+ hasTriggeredInitialApiCall: false, // Track if we've triggered API call when popover opens
43
44
  };
44
45
  this.renderTags = this.renderTags.bind(this);
45
46
  this.populateTags = this.populateTags.bind(this);
@@ -51,6 +52,14 @@ export class TagList extends React.Component { // eslint-disable-line react/pref
51
52
 
52
53
  componentDidMount() {
53
54
  this.generateTags(this.props);
55
+ // Trigger initial API call if tags are empty (similar to Email/SMS behavior)
56
+ const { tags, injectedTags, onContextChange } = this.props;
57
+ const hasNoTags = (!tags || tags.length === 0) && _.isEmpty(injectedTags);
58
+ if (hasNoTags && onContextChange) {
59
+ // Trigger API call with default 'Outbound' context to match CapTagList default
60
+ // This ensures tags are loaded when component mounts
61
+ this.getTagsforContext('Outbound');
62
+ }
54
63
  }
55
64
 
56
65
  componentWillReceiveProps(nextProps) {
@@ -59,23 +68,27 @@ export class TagList extends React.Component { // eslint-disable-line react/pref
59
68
  // 2. Context change is happening (detected by different tag arrays)
60
69
  const { injectedTags: currentInjectedTags, tags: currentTags } = this.props;
61
70
  const { injectedTags: nextInjectedTags, tags: nextTags, fetchingSchemaError } = nextProps;
62
-
71
+
63
72
  const isInitialLoad = _.isEmpty(currentInjectedTags) && _.isEmpty(currentTags);
64
73
  const isContextChange = !_.isEqual(nextTags, currentTags) && !_.isEmpty(currentTags);
65
-
74
+
66
75
  if (isInitialLoad || isContextChange) {
67
76
  this.setState({loading: true});
68
77
  }
69
-
78
+
70
79
  // Only reset loading for injectedTags changes if we're not currently loading due to context change
71
80
  if (!_.isEqual(nextInjectedTags, currentInjectedTags) && !this.state.loading) {
72
81
  this.setState({loading: false});
73
82
  this.clearLoadingTimeout();
74
83
  }
75
-
84
+
76
85
  if (!_.isEqual(nextTags, currentTags)) {
77
86
  this.setState({loading: false});
78
87
  this.clearLoadingTimeout();
88
+ // Reset the flag when tags are received, so we can trigger API call again if needed
89
+ if (nextTags && nextTags.length > 0) {
90
+ this.setState({ hasTriggeredInitialApiCall: false });
91
+ }
79
92
  }
80
93
  if (fetchingSchemaError) {
81
94
  this.setState({tagsError: fetchingSchemaError, loading: false});
@@ -86,7 +99,7 @@ export class TagList extends React.Component { // eslint-disable-line react/pref
86
99
  componentDidUpdate(prevProps) {
87
100
  const { tags, injectedTags, selectedOfferDetails } = this.props;
88
101
  const { tags: prevTags, injectedTags: prevInjectedTags, selectedOfferDetails: prevSelectedOfferDetails } = prevProps;
89
-
102
+
90
103
  if (tags !== prevTags || injectedTags !== prevInjectedTags || selectedOfferDetails !== prevSelectedOfferDetails) {
91
104
  this.generateTags(this.props);
92
105
  }
@@ -111,17 +124,44 @@ export class TagList extends React.Component { // eslint-disable-line react/pref
111
124
  getTagsforContext = (data) => {
112
125
  // Set loading state when context change is requested
113
126
  this.setState({loading: true, currentContext: data});
114
-
127
+
115
128
  // Set a timeout to prevent infinite loading (fallback safety)
116
129
  this.clearLoadingTimeout();
117
130
  this.loadingTimeout = setTimeout(() => {
118
131
  this.setState({loading: false});
119
132
  }, 5000); // Reduced timeout to 5 seconds for better UX
120
-
133
+
121
134
  const { onContextChange } = this.props;
122
- onContextChange(data);
135
+ // Always call onContextChange if available - this triggers the API call
136
+ // The API call will fetch tags from /meta/TAG endpoint
137
+ if (onContextChange) {
138
+ onContextChange(data);
139
+ } else {
140
+ console.warn('TagList: onContextChange is not available. API call will not be triggered.');
141
+ }
123
142
  }
124
143
 
144
+ handlePopoverVisibilityChange = (visible) => {
145
+ // When popover opens, trigger API call if tags are empty or if we haven't triggered it yet
146
+ // This ensures API call happens when user clicks "Add Label" button
147
+ if (visible && this.props.onContextChange) {
148
+ const { tags, injectedTags } = this.props;
149
+ // Check if tags array is empty or if state tags are empty
150
+ const hasNoTags = (!tags || tags.length === 0) && _.isEmpty(injectedTags);
151
+ const hasNoStateTags = _.isEmpty(this.state.tags);
152
+ const hasNotTriggeredApiCall = !this.state.hasTriggeredInitialApiCall;
153
+
154
+ // Trigger API call if tags are not loaded yet OR if we haven't triggered it yet
155
+ if ((hasNoTags || hasNoStateTags || hasNotTriggeredApiCall)) {
156
+ // Mark that we've triggered the API call
157
+ this.setState({ hasTriggeredInitialApiCall: true });
158
+ // Trigger API call with default 'Outbound' context to match CapTagList default
159
+ // This will call onContextChange which triggers handleOnTagsContextChange in InApp
160
+ this.getTagsforContext('Outbound');
161
+ }
162
+ }
163
+ };
164
+
125
165
  generateTags = (props) => {
126
166
  let tags = {};
127
167
  let injectedTags = {};
@@ -149,11 +189,11 @@ export class TagList extends React.Component { // eslint-disable-line react/pref
149
189
  if (eventContextTags?.length) {
150
190
  const TAG_HEADER_MSG_LABEL = this.props.intl.formatMessage(messages.entryEvent);
151
191
  eventContextTagsObj.eventContextTags = {
152
- name: TAG_HEADER_MSG_LABEL,
153
- desc: TAG_HEADER_MSG_LABEL,
154
- resolved: true,
192
+ "name": TAG_HEADER_MSG_LABEL,
193
+ "desc": TAG_HEADER_MSG_LABEL,
194
+ "resolved": true,
155
195
  'tag-header': true,
156
- subtags: {},
196
+ "subtags": {},
157
197
  };
158
198
 
159
199
  eventContextTags.forEach((tag) => {
@@ -164,11 +204,11 @@ export class TagList extends React.Component { // eslint-disable-line react/pref
164
204
  // Initializing the tags profile if it doesn't exist
165
205
  if (!eventContextTagsObj?.eventContextTags?.subtags?.[profileId]) {
166
206
  eventContextTagsObj.eventContextTags.subtags[profileId] = {
167
- name: profileName,
168
- desc: profileName,
169
- resolved: true,
207
+ "name": profileName,
208
+ "desc": profileName,
209
+ "resolved": true,
170
210
  'tag-header': true,
171
- subtags: {},
211
+ "subtags": {},
172
212
  };
173
213
  }
174
214
  // Adding the current tag to the profile group
@@ -201,7 +241,7 @@ export class TagList extends React.Component { // eslint-disable-line react/pref
201
241
  _.forEach(tagsList, (temp) => {
202
242
  const tag = temp.definition;
203
243
  const { intl } = this.props;
204
- const { locale: userLocale } = intl || {};
244
+ const { locale: userLocale } = intl || {};
205
245
 
206
246
  // Check if the tag.value should be skipped based on feature control
207
247
  if (_.includes(excludedTags, tag.value)) {
@@ -209,8 +249,8 @@ export class TagList extends React.Component { // eslint-disable-line react/pref
209
249
  }
210
250
  if (!tag['tag-header']) {
211
251
  mainTags[tag.value] = {
212
- "name": tag?.label[userLocale] ? tag?.label[userLocale] : tag?.label?.en,
213
- "desc": tag?.label[userLocale] ? tag?.label[userLocale] : tag?.label?.en,
252
+ name: tag?.label[userLocale] ? tag?.label[userLocale] : tag?.label?.en,
253
+ desc: tag?.label[userLocale] ? tag?.label[userLocale] : tag?.label?.en,
214
254
  };
215
255
  } else if (tag['tag-header'] && mainTags[tag.value]) {
216
256
  mainTags[tag.value].subtags = _.concat(mainTags[tag.value].subtags, tag.subtags);
@@ -366,12 +406,14 @@ export class TagList extends React.Component { // eslint-disable-line react/pref
366
406
  visibleTaglist={this.props.visibleTaglist}
367
407
  hidePopover={this.props.hidePopover}
368
408
  onContextChange={this.getTagsforContext}
409
+ onVisibleChange={this.handlePopoverVisibilityChange}
369
410
  moduleFilterEnabled={this.props.moduleFilterEnabled}
370
411
  modalProps={this.props.modalProps}
371
412
  currentOrgDetails={this.props.currentOrgDetails}
372
413
  channel={this.props.channel}
373
414
  disabled={this.props.disabled}
374
415
  fetchingSchemaError={this?.state?.tagsError}
416
+ popoverPlacement={this.props.popoverPlacement}
375
417
  />
376
418
  </div>
377
419
  );
@@ -402,6 +444,7 @@ TagList.propTypes = {
402
444
  disabled: PropTypes.bool,
403
445
  fetchingSchemaError: PropTypes.bool,
404
446
  eventContextTags: PropTypes.array,
447
+ popoverPlacement: PropTypes.string,
405
448
  intl: PropTypes.shape({
406
449
  formatMessage: PropTypes.func.isRequired,
407
450
  locale: PropTypes.string,
@@ -14,7 +14,7 @@ import inAppIllustration from '@capillarytech/cap-ui-library/assets/images/featu
14
14
  import messages from './messages';
15
15
  import { FormattedMessage } from 'react-intl';
16
16
  import { CapIllustration } from "@capillarytech/cap-ui-library";
17
- import { MOBILE_PUSH, SMS, EMAIL, LINE, VIBER, FACEBOOK, WHATSAPP, RCS, ZALO, INAPP, WEBPUSH } from '../CreativesContainer/constants';
17
+ import { MOBILE_PUSH, SMS, EMAIL, LINE, VIBER, FACEBOOK, WHATSAPP, RCS, ZALO, INAPP } from '../CreativesContainer/constants';
18
18
 
19
19
 
20
20
  // Configuration object for channel types
@@ -133,18 +133,6 @@ function ChannelTypeIllustration(props) {
133
133
  };
134
134
  }
135
135
 
136
- if (type === WEBPUSH) {
137
- return {
138
- buttonLabel: <FormattedMessage {...messages.newWebPushTemplate} values={{ template: templateText }} />,
139
- onClick: createTemplate,
140
- illustrationImage: pushIllustration,
141
- title: <FormattedMessage {...messages.webPushTitleIllustration} values={{ template: templateText }} />,
142
- description: <FormattedMessage {...messages.webPushDescIllustration} />,
143
- descriptionPosition: 'bottom',
144
- descriptionClassName: 'illustration-desc',
145
- };
146
- }
147
-
148
136
  // Handle standard channels using configuration
149
137
  const config = CHANNEL_CONFIG[type];
150
138
  if (!config) {
@@ -133,20 +133,17 @@
133
133
  .ant-card-meta-description{
134
134
  display: -webkit-box;
135
135
  -webkit-line-clamp: 13;
136
- line-clamp: 13;
137
136
  -webkit-box-orient: vertical;
138
137
  }
139
138
  }
140
139
  .truncate-text-with-button{
141
140
  .ant-card-meta-description{
142
141
  -webkit-line-clamp: 13;
143
- line-clamp: 13;
144
142
  }
145
143
  }
146
144
  .truncate-text-with-image{
147
145
  .ant-card-meta-description{
148
146
  -webkit-line-clamp: 3;
149
- line-clamp: 3;
150
147
  }
151
148
  }
152
149
 
@@ -316,72 +313,63 @@
316
313
  }
317
314
  }
318
315
  }
319
- }
320
-
321
- .WEBPUSH {
322
- .cap-custom-card {
323
- .ant-card-body {
324
- height: 19rem;
325
- padding: $CAP_SPACE_16;
326
- overflow: hidden;
327
-
328
- .ant-card-meta {
329
- height: 100%;
330
-
331
- .ant-card-meta-description {
332
- height: 100%;
333
- display: flex;
334
- flex-direction: column;
335
-
336
- .sms-template-content.webpush-template-content {
337
- height: 100%;
338
- overflow: hidden;
339
-
340
- .webpush-template-card {
341
- height: 100%;
342
- overflow: hidden;
343
-
344
- .webpush-template-meta {
345
- flex-shrink: 0;
346
- }
347
-
348
- .webpush-template-text {
349
- flex: 1;
350
- min-height: 0;
351
- overflow: hidden;
352
- }
353
-
354
- .webpush-media-image {
355
- max-height: 7.142rem;
356
- flex-shrink: 0;
357
- }
358
-
359
- .webpush-template-cta-section {
360
- flex-shrink: 0;
361
- margin-top: $CAP_SPACE_08;
362
- padding-top: $CAP_SPACE_08;
363
- border-top: 1px solid $CAP_G07;
364
- }
365
- }
366
- }
367
- }
368
- }
316
+ .INAPP {
317
+ margin-bottom: $CAP_SPACE_12;
318
+ .inapp-container {
319
+ margin-top: $CAP_SPACE_24;
369
320
  }
321
+ // Modal Layout - centered
322
+ .inapp-modal-layout {
323
+ position: absolute;
324
+ display: flex;
325
+ width: 12rem;
326
+ top: 10%;
327
+ left: 10%;
328
+ bottom: 5%;
329
+ overflow: hidden;
330
+ background-color: $CAP_WHITE;
331
+ border-radius: $CAP_SPACE_08;
370
332
  }
371
-
372
- .cap-custom-card.has-hover-option:hover {
373
- .sms-template-content.webpush-template-content {
374
- opacity: 0.2;
375
- }
333
+
334
+ // Full Screen Layout
335
+ .inapp-fullscreen-layout {
336
+ position: absolute;
337
+ display: flex;
338
+ width: 12rem;
339
+ left: 10%;
340
+ top: 1%;
341
+ bottom: 1%;
342
+ overflow: hidden;
343
+ background-color: $CAP_WHITE;
344
+ border-radius: $CAP_SPACE_08;
345
+ }
346
+
347
+ // Top Banner Layout
348
+ .inapp-top-banner-layout {
349
+ position: absolute;
350
+ display: flex;
351
+ width: 12rem;
352
+ left: 10%;
353
+ top: 1%;
354
+ bottom: 20%;
355
+ overflow: hidden;
356
+ background-color: $CAP_WHITE;
357
+ border-radius: $CAP_SPACE_08;
358
+ }
359
+
360
+ // Bottom Banner Layout
361
+ .inapp-bottom-banner-layout {
362
+ position: absolute;
363
+ display: flex;
364
+ justify-content: center;
365
+ width: 12rem;
366
+ left: 10%;
367
+ top: 50%;
368
+ bottom: 2%;
369
+ overflow: hidden;
370
+ background-color: $CAP_WHITE;
371
+ border-radius: $CAP_SPACE_08;
376
372
  }
377
-
378
- &.no-image .ant-card-meta {
379
- background: $CAP_WHITE;
380
- padding: $CAP_SPACE_16;
381
-
382
- .ant-card-meta-description {
383
- height: 100%;
384
- }
385
373
  }
386
374
  }
387
375
 
@@ -438,136 +426,6 @@
438
426
  width: 100%;
439
427
  }
440
428
 
441
- .sms-template-content.webpush-template-content {
442
- padding: 0;
443
- // Font-family override: needed when used in library mode where parent repo's root font-family differs
444
- font-family: 'Roboto', open-sans, sans-serif;
445
- }
446
-
447
- .webpush-template-card {
448
- display: flex;
449
- flex-direction: column;
450
-
451
- .webpush-template-meta {
452
- display: flex;
453
- align-items: flex-start;
454
- gap: $CAP_SPACE_08;
455
- }
456
-
457
- .webpush-brand-icon,
458
- .webpush-brand-icon-placeholder {
459
- width: $CAP_SPACE_20;
460
- height: $CAP_SPACE_20;
461
- border-radius: 50%;
462
- flex-shrink: 0;
463
- object-fit: cover;
464
- }
465
-
466
- .webpush-brand-icon-placeholder {
467
- background-color: $CAP_G07;
468
- }
469
-
470
- .webpush-template-text {
471
- display: flex;
472
- flex-direction: column;
473
- gap: $CAP_SPACE_04;
474
- width: 100%;
475
- }
476
-
477
- .webpush-template-header {
478
- display: flex;
479
- align-items: flex-start;
480
- justify-content: space-between;
481
- gap: $CAP_SPACE_08;
482
- }
483
-
484
- .webpush-template-title {
485
- width: 1px; // Required for text truncation with flex: 1
486
- font-weight: 600;
487
- color: $CAP_G02;
488
- font-size: $FONT_SIZE_S;
489
- line-height: $CAP_SPACE_16;
490
- word-break: break-word;
491
- flex: 1;
492
- overflow: hidden;
493
- text-overflow: ellipsis;
494
- white-space: nowrap;
495
- }
496
-
497
- .webpush-template-time {
498
- color: $CAP_G04;
499
- font-size: $FONT_SIZE_VS;
500
- line-height: $CAP_SPACE_16;
501
- white-space: nowrap;
502
- flex-shrink: 0;
503
- }
504
-
505
- .webpush-template-message {
506
- color: $CAP_G04;
507
- font-size: $FONT_SIZE_S;
508
- line-height: $CAP_SPACE_16;
509
- word-break: break-word;
510
- display: -webkit-box;
511
- -webkit-line-clamp: 3;
512
- line-clamp: 3;
513
- -webkit-box-orient: vertical;
514
- overflow: hidden;
515
- text-overflow: ellipsis;
516
- }
517
-
518
- .webpush-media-image {
519
- width: 100%;
520
- height: auto;
521
- max-height: 8.571rem;
522
- border-radius: $CAP_SPACE_08;
523
- object-fit: cover;
524
- margin-top: $CAP_SPACE_04;
525
- }
526
-
527
- .webpush-template-cta-section {
528
- display: flex;
529
- margin-top: $CAP_SPACE_08;
530
- padding-top: $CAP_SPACE_08;
531
- width: 100%;
532
-
533
- &.single-cta {
534
- justify-content: center;
535
-
536
- .webpush-template-cta-item {
537
- flex: 0 1 auto;
538
- }
539
- }
540
-
541
- .webpush-template-cta-item {
542
- flex: 1;
543
- padding: 0 $CAP_SPACE_08;
544
- display: flex;
545
- align-items: center;
546
- justify-content: center;
547
- }
548
-
549
- .webpush-template-cta-item + .webpush-template-cta-item {
550
- border-left: 1px solid $CAP_G07;
551
- }
552
-
553
- .webpush-template-cta-text {
554
- font-weight: 600;
555
- font-size: $FONT_SIZE_VS;
556
- line-height: 1rem;
557
- color: $CAP_G02;
558
- text-align: center;
559
- white-space: nowrap;
560
- overflow: hidden;
561
- text-overflow: ellipsis;
562
- width: 100%;
563
- user-select: none;
564
- -webkit-user-select: none;
565
- -moz-user-select: none;
566
- -ms-user-select: none;
567
- }
568
- }
569
- }
570
-
571
429
  .footer-container{
572
430
  padding: 8px 0 8px 16px;
573
431
  }
@@ -772,7 +630,6 @@
772
630
  text-overflow: ellipsis;
773
631
  display: -webkit-box;
774
632
  -webkit-line-clamp: 3;
775
- line-clamp: 3;
776
633
  -webkit-box-orient: vertical;
777
634
  }
778
635
  .title{
@@ -835,7 +692,6 @@
835
692
  text-overflow: ellipsis;
836
693
  display: -webkit-box;
837
694
  -webkit-line-clamp: 2;
838
- line-clamp: 2;
839
695
  -webkit-box-orient: vertical;
840
696
  }
841
697
  .actions{
@@ -897,7 +753,8 @@
897
753
  }
898
754
 
899
755
  .whatsapp-filters,
900
- .zalo-filters {
756
+ .zalo-filters,
757
+ .inapp-filters {
901
758
  display: flex;
902
759
  width: 100%;
903
760
  padding-left: 8px;
@@ -913,7 +770,6 @@
913
770
  overflow: hidden;
914
771
  &.desc{
915
772
  -webkit-line-clamp: 5;
916
- line-clamp: 5;
917
773
  }
918
774
  }
919
775
 
@@ -1011,7 +867,6 @@
1011
867
  .whatsapp-message-with-media {
1012
868
  display: -webkit-box;
1013
869
  -webkit-line-clamp: 3;
1014
- line-clamp: 3;
1015
870
  -webkit-box-orient: vertical;
1016
871
  overflow: hidden;
1017
872
  }
@@ -1019,7 +874,6 @@
1019
874
  .whatsapp-message-without-media {
1020
875
  display: -webkit-box;
1021
876
  -webkit-line-clamp: 10;
1022
- line-clamp: 10;
1023
877
  -webkit-box-orient: vertical;
1024
878
  overflow: hidden;
1025
879
  }
@@ -6,7 +6,7 @@
6
6
 
7
7
  import * as types from './constants';
8
8
  import {
9
- LINE, WHATSAPP, RCS, ZALO, WEBPUSH,
9
+ LINE, WHATSAPP, RCS, ZALO,
10
10
  } from '../CreativesContainer/constants';
11
11
 
12
12
  export function getAllTemplates(channel, queryParams, intlCopyOf = '') {
@@ -68,7 +68,6 @@ export function setChannelAccount(channel, account) {
68
68
  [LINE]: types.SET_LINE_ACCOUNT,
69
69
  [WHATSAPP]: types.SET_WHATSAPP_ACCOUNT,
70
70
  [ZALO]: types.SET_ZALO_ACCOUNT,
71
- [WEBPUSH]: types.SET_WEBPUSH_ACCOUNT,
72
71
  [RCS]: types.SET_RCS_ACCOUNT,
73
72
  };
74
73
 
@@ -51,7 +51,6 @@ export const SET_FACEBOOK_ACCOUNT = "app/v2Containers/Templates/SET_FACEBOOK_ACC
51
51
  export const SET_WHATSAPP_ACCOUNT = "app/v2Containers/Templates/SET_WHATSAPP_ACCOUNT";
52
52
  export const SET_RCS_ACCOUNT = "app/v2Containers/Templates/SET_RCS_ACCOUNT";
53
53
  export const SET_ZALO_ACCOUNT = "app/v2Containers/Templates/SET_ZALO_ACCOUNT";
54
- export const SET_WEBPUSH_ACCOUNT = "app/v2Containers/Templates/SET_WEBPUSH_ACCOUNT";
55
54
 
56
55
  export const GET_DEAFULT_BEE_TEMPLATES_REQUEST = 'app/v2Containers/Templates/GET_DEAFULT_BEE_TEMPLATES_REQUEST';
57
56
  export const GET_DEAFULT_BEE_TEMPLATES_SUCCESS = 'app/v2Containers/Templates/GET_DEAFULT_BEE_TEMPLATES_SUCCESS';