@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
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { useRef, useCallback } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { FormattedMessage } from 'react-intl';
4
4
  import styled from 'styled-components';
@@ -11,25 +11,38 @@ import CapSpin from '@capillarytech/cap-ui-library/CapSpin';
11
11
  import CapButton from '@capillarytech/cap-ui-library/CapButton';
12
12
  import CapError from '@capillarytech/cap-ui-library/CapError';
13
13
  import ComponentWithLabelHOC from '@capillarytech/cap-ui-library/assets/HOCs/ComponentWithLabelHOC';
14
- import Email from '../../Email';
14
+ import { CAP_COLOR_06, CAP_WHITE } from '@capillarytech/cap-ui-library/styled/variables';
15
+ import { EmailWithoutSaga } from '../../Email';
15
16
  import CmsTemplatesComponent from '../../../v2Components/CmsTemplatesComponent';
17
+ import EmailHTMLEditor from './EmailHTMLEditor';
18
+ import TestAndPreviewSlidebox from '../../../v2Components/TestAndPreviewSlidebox';
19
+ import { EMAIL } from '../../CreativesContainer/constants';
16
20
  import messages from '../messages';
17
21
  import { EMAIL_CREATE_MODES, STEPS } from '../constants';
22
+ import { hasSupportCKEditor } from '../../../utils/common';
18
23
 
19
24
  const CapRadioCardWithLabel = ComponentWithLabelHOC(CapRadioCard);
20
25
 
21
26
  const CardContainer = styled.div`
22
27
  margin-top: 16px;
23
- .ant-radio-group{
24
- .ant-radio-button-wrapper{
25
- &:first-child{
26
- margin-left: unset;
28
+
29
+ .ant-radio-group.cap-radioCard-v2 {
30
+ .ant-radio-button-wrapper {
31
+ &.ant-radio-button-wrapper-checked {
32
+ .icon-container {
33
+ background-color: ${CAP_COLOR_06};
34
+ .anticon,
35
+ .cap-icon {
36
+ color: ${CAP_WHITE};
37
+ }
38
+ }
27
39
  }
28
40
  }
29
41
  }
30
42
  `;
31
43
 
32
- // Mode selection component that handles the creation mode selection UI
44
+
45
+ // Mode selection component
33
46
  const ModeSelectionUI = ({
34
47
  isFullMode,
35
48
  templateName,
@@ -51,20 +64,21 @@ const ModeSelectionUI = ({
51
64
  value={templateName}
52
65
  labelPosition="top"
53
66
  size="default"
54
- style={{ width: '68%'}}
67
+ style={{ width: '68%' }}
55
68
  />
56
69
  )}
57
70
  <CardContainer>
58
71
  <CapRadioCardWithLabel
72
+ style={{ marginLeft: '-6px'}}
59
73
  panes={modes}
60
74
  onChange={onChange}
61
75
  selected={emailCreateMode}
62
- label={<FormattedMessage {...messages.createMode} />}
76
+ label={<FormattedMessage {...messages.editorType} />}
63
77
  />
64
78
  </CardContainer>
65
79
  <>
66
80
  {emailCreateMode === EMAIL_CREATE_MODES.UPLOAD && (
67
- <div style={{ marginLeft: '8px' }}>
81
+ <div>
68
82
  <CapUploader onChange={useFileUpload} accept=".zip, .html, .htm" showUploadList={false}>
69
83
  {(isFullMode && isTemplateNameEmpty) && (
70
84
  <CapError type="error">
@@ -98,25 +112,36 @@ ModeSelectionUI.propTypes = {
98
112
  uploadButtonLabel: PropTypes.node.isRequired,
99
113
  };
100
114
 
101
- // Content creation component that handles the email or template selection UI
115
+ // Content creation component
102
116
  const ContentCreationUI = ({
103
117
  isShowEmailCreate,
104
118
  emailProps,
105
119
  cmsTemplatesProps,
106
- }) => (
107
- <>
108
- {isShowEmailCreate ? (
109
- <Email {...emailProps} />
110
- ) : (
111
- <CmsTemplatesComponent {...cmsTemplatesProps} />
112
- )}
113
- </>
114
- );
120
+ isHTMLEditorMode,
121
+ htmlEditorProps,
122
+ }) => {
123
+
124
+ return (
125
+ <>
126
+ {isShowEmailCreate ? (
127
+ isHTMLEditorMode ? (
128
+ <EmailHTMLEditor {...htmlEditorProps} />
129
+ ) : (
130
+ <EmailWithoutSaga {...emailProps} />
131
+ )
132
+ ) : (
133
+ <CmsTemplatesComponent {...cmsTemplatesProps} />
134
+ )}
135
+ </>
136
+ );
137
+ };
115
138
 
116
139
  ContentCreationUI.propTypes = {
117
140
  isShowEmailCreate: PropTypes.bool.isRequired,
118
141
  emailProps: PropTypes.object.isRequired,
119
142
  cmsTemplatesProps: PropTypes.object.isRequired,
143
+ isHTMLEditorMode: PropTypes.bool,
144
+ htmlEditorProps: PropTypes.object,
120
145
  };
121
146
 
122
147
  // Main EmailWrapper presentational component
@@ -137,9 +162,136 @@ const EmailWrapperView = ({
137
162
  isShowEmailCreate,
138
163
  emailProps,
139
164
  cmsTemplatesProps,
165
+ metaEntities,
166
+ loadingTags,
167
+ injectedTags,
168
+ globalActions,
169
+ supportedTags,
170
+ getDefaultTags,
171
+ location,
172
+ currentOrgDetails,
173
+ forwardedTags,
174
+ selectedOfferDetails,
175
+ eventContextTags,
176
+ getFormdata,
177
+ isGetFormData,
178
+ getLiquidTags,
179
+ showLiquidErrorInFooter,
180
+ onValidationFail,
181
+ emailActions,
182
+ Email,
183
+ templateData: templateDataProp,
184
+ params,
185
+ fetchingLiquidTags,
186
+ createTemplateInProgress,
187
+ fetchingCmsData,
188
+ setIsLoadingContent,
189
+ showTestAndPreviewSlidebox,
190
+ handleCloseTestAndPreview,
191
+ showTemplateName,
192
+ onHtmlEditorValidationStateChange,
193
+ moduleType,
140
194
  }) => {
195
+ const htmlEditorRef = useRef(null);
196
+ const supportCKEditor = hasSupportCKEditor();
197
+ const hasParamsIdForEditor = params?.id || location?.query?.id || location?.params?.id || location?.pathname?.includes('/edit/');
198
+ const isEditModeForEditor = hasParamsIdForEditor;
199
+ const isBEEFromProps = emailProps?.editor === 'BEE' && emailProps?.selectedEditorMode === null;
200
+ const isDragDropFromCreateMode = emailCreateMode === EMAIL_CREATE_MODES.DRAG_DROP;
201
+ const isExplicitlyBEEEditor = isBEEFromProps || isDragDropFromCreateMode;
202
+ let isHTMLEditorMode = false;
141
203
 
142
- const isShowTemplateSelection = step === STEPS.MODE_SELECTION || (step === STEPS.TEMPLATE_SELECTION && emailCreateMode === EMAIL_CREATE_MODES.UPLOAD);
204
+ if (supportCKEditor) {
205
+ isHTMLEditorMode = false; // Legacy flow: use Email component
206
+ } else if (isEditModeForEditor) {
207
+ isHTMLEditorMode = !isExplicitlyBEEEditor;
208
+ } else {
209
+ if (isExplicitlyBEEEditor || isBEEFromProps || isDragDropFromCreateMode) {
210
+ isHTMLEditorMode = false;
211
+ } else {
212
+ isHTMLEditorMode = emailProps?.selectedEditorMode === EMAIL_CREATE_MODES.HTML_EDITOR ||
213
+ emailCreateMode === EMAIL_CREATE_MODES.HTML_EDITOR;
214
+ }
215
+ }
216
+
217
+ const isShowTemplateSelection = step === STEPS.MODE_SELECTION;
218
+
219
+ // Create onFormDataChange callback for template name updates (similar to Email component)
220
+ // This allows CreativesContainer to update the template name when user clicks "Edit name"
221
+ // When user edits the name in CreativesContainer header, it calls this callback
222
+ // which updates the template name in EmailWrapper, and then CreativesContainer
223
+ // will call showTemplateName again with the updated formData
224
+ const handleFormDataChange = useCallback((updatedFormData) => {
225
+ const newTemplateName = updatedFormData?.['template-name'] || templateName;
226
+ if (newTemplateName !== templateName && onTemplateNameChange) {
227
+ // Update template name in parent (useEmailWrapper hook)
228
+ onTemplateNameChange({ target: { value: newTemplateName } });
229
+ }
230
+ // Note: CreativesContainer will call showTemplateName again after this callback
231
+ // (it stores the callback in templateContainerDetails and calls it after state updates)
232
+ }, [templateName, onTemplateNameChange]);
233
+
234
+ const htmlEditorProps = isHTMLEditorMode ? {
235
+ // Location and params
236
+ location,
237
+ params,
238
+ // Tag-related props
239
+ getDefaultTags,
240
+ supportedTags,
241
+ metaEntities,
242
+ injectedTags,
243
+ globalActions,
244
+ loadingTags,
245
+ eventContextTags,
246
+ forwardedTags,
247
+ selectedOfferDetails,
248
+ currentOrgDetails,
249
+ // Email Redux state and actions
250
+ Email,
251
+ emailActions,
252
+ // Full mode props
253
+ isFullMode,
254
+ templateName,
255
+ isGetFormData,
256
+ getFormdata,
257
+ // Library mode props
258
+ templateData: templateDataProp,
259
+ // Uploaded content from zip file
260
+ EmailLayout,
261
+ // Liquid validation
262
+ getLiquidTags,
263
+ showLiquidErrorInFooter,
264
+ // Validation state callback
265
+ onHtmlEditorValidationStateChange,
266
+ onValidationFail,
267
+ // Template name
268
+ showTemplateName,
269
+ onFormDataChange: handleFormDataChange,
270
+ // Module type for unsubscribe tag validation
271
+ moduleType,
272
+ // Loading states
273
+ fetchingLiquidTags: fetchingLiquidTags || false,
274
+ createTemplateInProgress: createTemplateInProgress || false,
275
+ fetchingCmsData: fetchingCmsData || false,
276
+ // Parent loading control
277
+ setIsLoadingContent,
278
+ ref: htmlEditorRef,
279
+ } : {};
280
+
281
+ // Get formData for TestAndPreviewSlidebox when needed
282
+ const getFormDataForPreview = () => {
283
+ if (htmlEditorRef.current && htmlEditorRef.current.getFormDataForPreview) {
284
+ return htmlEditorRef.current.getFormDataForPreview();
285
+ }
286
+ return {};
287
+ };
288
+
289
+ const getContentForPreview = () => {
290
+ if (htmlEditorRef.current && htmlEditorRef.current.getContentForPreview) {
291
+ return htmlEditorRef.current.getContentForPreview();
292
+ }
293
+ return '';
294
+ };
143
295
 
144
296
  return (
145
297
  <>
@@ -163,9 +315,22 @@ const EmailWrapperView = ({
163
315
  isShowEmailCreate={isShowEmailCreate}
164
316
  emailProps={emailProps}
165
317
  cmsTemplatesProps={cmsTemplatesProps}
318
+ isHTMLEditorMode={isHTMLEditorMode}
319
+ htmlEditorProps={htmlEditorProps}
166
320
  />
167
321
  )}
168
322
  </CapSpin>
323
+ {/* Render TestAndPreviewSlidebox for HTML Editor (similar to legacy Email component) */}
324
+ {isHTMLEditorMode && showTestAndPreviewSlidebox && (
325
+ <TestAndPreviewSlidebox
326
+ show={showTestAndPreviewSlidebox}
327
+ onClose={handleCloseTestAndPreview}
328
+ formData={getFormDataForPreview()}
329
+ content={getContentForPreview()}
330
+ currentChannel={EMAIL}
331
+ currentTab={1}
332
+ />
333
+ )}
169
334
  </>
170
335
  );
171
336
  };
@@ -175,6 +340,10 @@ EmailWrapperView.propTypes = {
175
340
  emailCreateMode: PropTypes.string,
176
341
  step: PropTypes.string,
177
342
  isFullMode: PropTypes.bool,
343
+ getFormdata: PropTypes.func,
344
+ isGetFormData: PropTypes.bool,
345
+ getLiquidTags: PropTypes.func,
346
+ showLiquidErrorInFooter: PropTypes.func,
178
347
  templateName: PropTypes.string,
179
348
  onTemplateNameChange: PropTypes.func.isRequired,
180
349
  isTemplateNameEmpty: PropTypes.bool,
@@ -187,6 +356,27 @@ EmailWrapperView.propTypes = {
187
356
  isShowEmailCreate: PropTypes.bool.isRequired,
188
357
  emailProps: PropTypes.object.isRequired,
189
358
  cmsTemplatesProps: PropTypes.object.isRequired,
359
+ metaEntities: PropTypes.object,
360
+ loadingTags: PropTypes.bool,
361
+ injectedTags: PropTypes.object,
362
+ globalActions: PropTypes.object,
363
+ supportedTags: PropTypes.array,
364
+ getDefaultTags: PropTypes.string,
365
+ location: PropTypes.object,
366
+ currentOrgDetails: PropTypes.object,
367
+ forwardedTags: PropTypes.object,
368
+ selectedOfferDetails: PropTypes.array,
369
+ eventContextTags: PropTypes.array,
370
+ emailActions: PropTypes.object,
371
+ Email: PropTypes.object,
372
+ templateData: PropTypes.object,
373
+ params: PropTypes.object,
374
+ fetchingLiquidTags: PropTypes.bool,
375
+ createTemplateInProgress: PropTypes.bool,
376
+ fetchingCmsData: PropTypes.bool,
377
+ setIsLoadingContent: PropTypes.func,
378
+ showTestAndPreviewSlidebox: PropTypes.bool,
379
+ handleCloseTestAndPreview: PropTypes.func,
190
380
  };
191
381
 
192
382
  export default EmailWrapperView;
@@ -24,24 +24,20 @@ const HTMLEditorTesting = () => {
24
24
  // Show/Hide editor
25
25
  show: () => {
26
26
  setIsVisible(true);
27
- console.log('✅ HTMLEditor test mode activated');
28
27
  },
29
28
 
30
29
  hide: () => {
31
30
  setIsVisible(false);
32
- console.log('✅ HTMLEditor test mode deactivated');
33
31
  },
34
32
 
35
33
  toggle: () => {
36
- setIsVisible(prev => !prev);
37
- console.log(`✅ HTMLEditor test mode ${!isVisible ? 'activated' : 'deactivated'}`);
34
+ setIsVisible((prev) => !prev);
38
35
  },
39
36
 
40
37
  // Variant control
41
38
  setVariant: (newVariant) => {
42
39
  if (['email', 'inapp'].includes(newVariant)) {
43
40
  setVariant(newVariant);
44
- console.log(`✅ Variant set to: ${newVariant}`);
45
41
  } else {
46
42
  console.error('❌ Invalid variant. Use: "email" or "inapp"');
47
43
  }
@@ -52,7 +48,6 @@ const HTMLEditorTesting = () => {
52
48
  const validLayouts = Object.values(LAYOUT_TYPES);
53
49
  if (validLayouts.includes(layout)) {
54
50
  setLayoutType(layout);
55
- console.log(`✅ Layout set to: ${layout}`);
56
51
  } else {
57
52
  console.error(`❌ Invalid layout. Use: ${validLayouts.join(', ')}`);
58
53
  }
@@ -61,58 +56,22 @@ const HTMLEditorTesting = () => {
61
56
  // Content control
62
57
  setContent: (newContent) => {
63
58
  setContent(newContent);
64
- console.log('✅ Content updated');
65
59
  },
66
60
 
67
61
  getContent: () => {
68
- console.log('Current content:', content);
69
62
  return content;
70
63
  },
71
64
 
72
65
  // Status
73
66
  status: () => {
74
- console.log('📊 HTMLEditor Test Status:');
75
- console.log(` Visible: ${isVisible}`);
76
- console.log(` Variant: ${variant}`);
77
- console.log(` Layout: ${layoutType}`);
78
- console.log(` Content size: ${content.length} chars`);
79
67
  },
80
68
 
81
69
  // Help
82
70
  help: () => {
83
- console.log(`
84
- 🚀 HTMLEditor Testing Console Commands:
85
-
86
- 📱 Basic Controls:
87
- htmlEditorTest.show() - Show the editor
88
- htmlEditorTest.hide() - Hide the editor
89
- htmlEditorTest.toggle() - Toggle editor visibility
90
-
91
- ⚙️ Configuration:
92
- htmlEditorTest.setVariant('email') - Set to email variant
93
- htmlEditorTest.setVariant('inapp') - Set to inapp variant
94
- htmlEditorTest.setLayout('POPUP') - Set layout (inapp only)
95
- - Valid: POPUP, HEADER, FOOTER, FULLSCREEN
96
-
97
- 📝 Content:
98
- htmlEditorTest.setContent('<h1>Test</h1>') - Set editor content
99
- htmlEditorTest.getContent() - Get current content
100
-
101
- 📊 Status:
102
- htmlEditorTest.status() - Show current status
103
- htmlEditorTest.help() - Show this help
104
-
105
- 💡 Example Usage:
106
- htmlEditorTest.show()
107
- htmlEditorTest.setVariant('inapp')
108
- htmlEditorTest.setLayout('HEADER') // Top banner
109
- htmlEditorTest.setLayout('FOOTER') // Bottom banner
110
- `);
111
- }
71
+ },
112
72
  };
113
73
 
114
74
  // Show help on first load
115
- console.log('🚀 HTMLEditor Testing Ready! Type htmlEditorTest.help() for commands');
116
75
 
117
76
  // Cleanup on unmount
118
77
  return () => {
@@ -128,32 +87,40 @@ const HTMLEditorTesting = () => {
128
87
  }
129
88
 
130
89
  return (
131
- <div style={{
132
- position: 'fixed',
133
- top: 0,
134
- left: 0,
135
- right: 0,
136
- bottom: 0,
137
- backgroundColor: 'rgba(0, 0, 0, 0.8)',
138
- zIndex: 9999,
139
- display: 'flex',
140
- flexDirection: 'column',
141
- padding: '20px'
142
- }}>
143
- {/* Header */}
144
- <div style={{
145
- backgroundColor: '#fff',
146
- padding: '10px 20px',
147
- borderRadius: '8px 8px 0 0',
90
+ <div
91
+ style={{
92
+ position: 'fixed',
93
+ top: 0,
94
+ left: 0,
95
+ right: 0,
96
+ bottom: 0,
97
+ backgroundColor: 'rgba(0, 0, 0, 0.8)',
98
+ zIndex: 9999,
148
99
  display: 'flex',
149
- justifyContent: 'space-between',
150
- alignItems: 'center',
151
- borderBottom: '1px solid #ddd'
100
+ flexDirection: 'column',
101
+ padding: '20px',
152
102
  }}>
103
+ {/* Header */}
104
+ <div
105
+ style={{
106
+ backgroundColor: '#fff',
107
+ padding: '10px 20px',
108
+ borderRadius: '8px 8px 0 0',
109
+ display: 'flex',
110
+ justifyContent: 'space-between',
111
+ alignItems: 'center',
112
+ borderBottom: '1px solid #ddd',
113
+ }}>
153
114
  <div>
154
115
  <strong>HTMLEditor Testing Mode</strong>
155
116
  <span style={{ marginLeft: '20px', color: '#666' }}>
156
- Variant: {variant} | Layout: {layoutType}
117
+ Variant:
118
+ {' '}
119
+ {variant}
120
+ {' '}
121
+ | Layout:
122
+ {' '}
123
+ {layoutType}
157
124
  </span>
158
125
  </div>
159
126
  <button
@@ -164,7 +131,7 @@ const HTMLEditorTesting = () => {
164
131
  border: 'none',
165
132
  padding: '5px 15px',
166
133
  borderRadius: '4px',
167
- cursor: 'pointer'
134
+ cursor: 'pointer',
168
135
  }}
169
136
  >
170
137
  Close
@@ -172,12 +139,13 @@ const HTMLEditorTesting = () => {
172
139
  </div>
173
140
 
174
141
  {/* Editor Container */}
175
- <div style={{
176
- flex: 1,
177
- backgroundColor: '#fff',
178
- borderRadius: '0 0 8px 8px',
179
- overflow: 'hidden'
180
- }}>
142
+ <div
143
+ style={{
144
+ flex: 1,
145
+ backgroundColor: '#fff',
146
+ borderRadius: '0 0 8px 8px',
147
+ overflow: 'hidden',
148
+ }}>
181
149
  <IntlProvider locale="en" messages={{}}>
182
150
  <HTMLEditor
183
151
  variant={variant}
@@ -185,10 +153,8 @@ const HTMLEditorTesting = () => {
185
153
  initialContent={content}
186
154
  onContentChange={(newContent) => {
187
155
  setContent(newContent);
188
- console.log('📝 Content changed:', newContent.substring(0, 100) + '...');
189
156
  }}
190
- onSave={(savedContent) => {
191
- console.log('💾 Content saved:', savedContent);
157
+ onSave={() => {
192
158
  }}
193
159
  />
194
160
  </IntlProvider>