@capillarytech/creatives-library 8.0.266-alpha.0 → 8.0.266

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 +2 -2
  4. package/initialReducer.js +0 -2
  5. package/package.json +1 -1
  6. package/services/api.js +5 -10
  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 +6 -5
  12. package/utils/commonUtils.js +5 -28
  13. package/utils/imageUrlUpload.js +141 -0
  14. package/utils/tests/commonUtil.test.js +0 -224
  15. package/utils/tests/transformerUtils.test.js +297 -0
  16. package/utils/transformTemplateConfig.js +10 -0
  17. package/utils/transformerUtils.js +40 -0
  18. package/v2Components/CapDeviceContent/index.js +56 -61
  19. package/v2Components/CapImageUpload/constants.js +2 -0
  20. package/v2Components/CapImageUpload/index.js +65 -16
  21. package/v2Components/CapImageUpload/index.scss +4 -1
  22. package/v2Components/CapImageUpload/messages.js +5 -1
  23. package/v2Components/CapImageUrlUpload/constants.js +26 -0
  24. package/v2Components/CapImageUrlUpload/index.js +365 -0
  25. package/v2Components/CapImageUrlUpload/index.scss +35 -0
  26. package/v2Components/CapImageUrlUpload/messages.js +47 -0
  27. package/v2Components/CapTagList/index.js +1 -6
  28. package/v2Components/CapTagListWithInput/index.js +1 -5
  29. package/v2Components/CapTagListWithInput/messages.js +1 -1
  30. package/v2Components/CapWhatsappCTA/tests/index.test.js +0 -5
  31. package/v2Components/ErrorInfoNote/index.js +72 -402
  32. package/v2Components/ErrorInfoNote/messages.js +6 -32
  33. package/v2Components/ErrorInfoNote/style.scss +6 -278
  34. package/v2Components/FormBuilder/tests/index.test.js +4 -13
  35. package/v2Components/HtmlEditor/HTMLEditor.js +99 -418
  36. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1882
  37. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +16 -27
  38. package/v2Components/HtmlEditor/_htmlEditor.scss +45 -108
  39. package/v2Components/HtmlEditor/_index.lazy.scss +1 -0
  40. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +102 -23
  41. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +140 -148
  42. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
  43. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  44. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +1 -9
  45. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +6 -31
  46. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -22
  47. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +7 -4
  48. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +45 -35
  49. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +3 -1
  50. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  51. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +6 -7
  52. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +10 -7
  53. package/v2Components/HtmlEditor/components/PreviewPane/index.js +43 -22
  54. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  55. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +152 -0
  56. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/_validationErrorDisplay.scss +0 -18
  57. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -36
  58. package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +34 -46
  59. package/v2Components/HtmlEditor/components/ValidationPanel/index.js +46 -52
  60. package/v2Components/HtmlEditor/constants.js +20 -45
  61. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
  62. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +16 -351
  63. package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
  64. package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
  65. package/v2Components/HtmlEditor/hooks/useValidation.js +56 -213
  66. package/v2Components/HtmlEditor/index.js +1 -1
  67. package/v2Components/HtmlEditor/messages.js +94 -102
  68. package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +45 -214
  69. package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +0 -134
  70. package/v2Components/HtmlEditor/utils/contentSanitizer.js +41 -40
  71. package/v2Components/HtmlEditor/utils/htmlValidator.js +72 -71
  72. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +124 -158
  73. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
  74. package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -66
  75. package/v2Components/MobilePushPreviewV2/index.js +7 -33
  76. package/v2Components/TemplatePreview/_templatePreview.scss +24 -55
  77. package/v2Components/TemplatePreview/index.js +32 -47
  78. package/v2Components/TemplatePreview/messages.js +0 -4
  79. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
  80. package/v2Containers/App/constants.js +5 -0
  81. package/v2Containers/BeeEditor/index.js +90 -172
  82. package/v2Containers/CreativesContainer/SlideBoxContent.js +108 -129
  83. package/v2Containers/CreativesContainer/SlideBoxFooter.js +13 -163
  84. package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -2
  85. package/v2Containers/CreativesContainer/constants.js +3 -1
  86. package/v2Containers/CreativesContainer/index.js +214 -240
  87. package/v2Containers/CreativesContainer/messages.js +4 -8
  88. package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +210 -0
  89. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +2 -11
  90. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +354 -38
  91. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -103
  92. package/v2Containers/Email/actions.js +0 -7
  93. package/v2Containers/Email/constants.js +1 -5
  94. package/v2Containers/Email/index.js +29 -234
  95. package/v2Containers/Email/messages.js +0 -32
  96. package/v2Containers/Email/reducer.js +1 -12
  97. package/v2Containers/Email/sagas.js +7 -61
  98. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
  99. package/v2Containers/Email/tests/reducer.test.js +0 -46
  100. package/v2Containers/Email/tests/sagas.test.js +29 -320
  101. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +21 -211
  102. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +74 -40
  103. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +67 -2
  104. package/v2Containers/EmailWrapper/constants.js +0 -2
  105. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +77 -629
  106. package/v2Containers/EmailWrapper/index.js +23 -103
  107. package/v2Containers/EmailWrapper/messages.js +1 -65
  108. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
  109. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +77 -594
  110. package/v2Containers/InApp/actions.js +0 -7
  111. package/v2Containers/InApp/constants.js +4 -20
  112. package/v2Containers/InApp/index.js +359 -802
  113. package/v2Containers/InApp/index.scss +3 -4
  114. package/v2Containers/InApp/messages.js +3 -7
  115. package/v2Containers/InApp/reducer.js +3 -21
  116. package/v2Containers/InApp/sagas.js +9 -29
  117. package/v2Containers/InApp/selectors.js +5 -25
  118. package/v2Containers/InApp/tests/index.test.js +50 -154
  119. package/v2Containers/InApp/tests/reducer.test.js +0 -34
  120. package/v2Containers/InApp/tests/sagas.test.js +9 -61
  121. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +0 -3
  122. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +0 -2
  123. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +0 -2
  124. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +0 -9
  125. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +0 -12
  126. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +0 -4
  127. package/v2Containers/TagList/index.js +19 -62
  128. package/v2Containers/Templates/ChannelTypeIllustration.js +13 -1
  129. package/v2Containers/Templates/_templates.scss +202 -56
  130. package/v2Containers/Templates/actions.js +2 -1
  131. package/v2Containers/Templates/constants.js +1 -0
  132. package/v2Containers/Templates/index.js +278 -123
  133. package/v2Containers/Templates/messages.js +24 -4
  134. package/v2Containers/Templates/reducer.js +2 -0
  135. package/v2Containers/Templates/tests/index.test.js +10 -0
  136. package/v2Containers/TemplatesV2/TemplatesV2.style.js +2 -4
  137. package/v2Containers/TemplatesV2/index.js +15 -7
  138. package/v2Containers/TemplatesV2/messages.js +4 -0
  139. package/v2Containers/WebPush/Create/components/BrandIconSection.js +108 -0
  140. package/v2Containers/WebPush/Create/components/ButtonForm.js +172 -0
  141. package/v2Containers/WebPush/Create/components/ButtonItem.js +101 -0
  142. package/v2Containers/WebPush/Create/components/ButtonList.js +145 -0
  143. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.js +164 -0
  144. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.test.js +463 -0
  145. package/v2Containers/WebPush/Create/components/FormActions.js +54 -0
  146. package/v2Containers/WebPush/Create/components/FormActions.test.js +163 -0
  147. package/v2Containers/WebPush/Create/components/MediaSection.js +142 -0
  148. package/v2Containers/WebPush/Create/components/MediaSection.test.js +341 -0
  149. package/v2Containers/WebPush/Create/components/MessageSection.js +103 -0
  150. package/v2Containers/WebPush/Create/components/MessageSection.test.js +268 -0
  151. package/v2Containers/WebPush/Create/components/NotificationTitleSection.js +87 -0
  152. package/v2Containers/WebPush/Create/components/NotificationTitleSection.test.js +210 -0
  153. package/v2Containers/WebPush/Create/components/TemplateNameSection.js +54 -0
  154. package/v2Containers/WebPush/Create/components/TemplateNameSection.test.js +143 -0
  155. package/v2Containers/WebPush/Create/components/__snapshots__/ButtonsLinksSection.test.js.snap +86 -0
  156. package/v2Containers/WebPush/Create/components/__snapshots__/FormActions.test.js.snap +16 -0
  157. package/v2Containers/WebPush/Create/components/__snapshots__/MediaSection.test.js.snap +41 -0
  158. package/v2Containers/WebPush/Create/components/__snapshots__/MessageSection.test.js.snap +54 -0
  159. package/v2Containers/WebPush/Create/components/__snapshots__/NotificationTitleSection.test.js.snap +37 -0
  160. package/v2Containers/WebPush/Create/components/__snapshots__/TemplateNameSection.test.js.snap +21 -0
  161. package/v2Containers/WebPush/Create/components/_buttons.scss +246 -0
  162. package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +554 -0
  163. package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +607 -0
  164. package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +633 -0
  165. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +666 -0
  166. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +74 -0
  167. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +78 -0
  168. package/v2Containers/WebPush/Create/hooks/useButtonManagement.js +138 -0
  169. package/v2Containers/WebPush/Create/hooks/useButtonManagement.test.js +406 -0
  170. package/v2Containers/WebPush/Create/hooks/useCharacterCount.js +30 -0
  171. package/v2Containers/WebPush/Create/hooks/useCharacterCount.test.js +151 -0
  172. package/v2Containers/WebPush/Create/hooks/useImageUpload.js +104 -0
  173. package/v2Containers/WebPush/Create/hooks/useImageUpload.test.js +538 -0
  174. package/v2Containers/WebPush/Create/hooks/useTagManagement.js +122 -0
  175. package/v2Containers/WebPush/Create/hooks/useTagManagement.test.js +633 -0
  176. package/v2Containers/WebPush/Create/index.js +1148 -0
  177. package/v2Containers/WebPush/Create/index.scss +134 -0
  178. package/v2Containers/WebPush/Create/messages.js +211 -0
  179. package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +228 -0
  180. package/v2Containers/WebPush/Create/preview/NotificationContainer.js +294 -0
  181. package/v2Containers/WebPush/Create/preview/PreviewContent.js +90 -0
  182. package/v2Containers/WebPush/Create/preview/PreviewControls.js +305 -0
  183. package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +25 -0
  184. package/v2Containers/WebPush/Create/preview/WebPushPreview.js +156 -0
  185. package/v2Containers/WebPush/Create/preview/assets/Light.svg +53 -0
  186. package/v2Containers/WebPush/Create/preview/assets/Top.svg +5 -0
  187. package/v2Containers/WebPush/Create/preview/assets/android-arrow-down.svg +9 -0
  188. package/v2Containers/WebPush/Create/preview/assets/android-arrow-up.svg +9 -0
  189. package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
  190. package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
  191. package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +106 -0
  192. package/v2Containers/WebPush/Create/preview/assets/iOS.svg +26 -0
  193. package/v2Containers/WebPush/Create/preview/assets/macos-arrow-down-icon.svg +9 -0
  194. package/v2Containers/WebPush/Create/preview/assets/macos-triple-dot-icon.svg +9 -0
  195. package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +18 -0
  196. package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +29 -0
  197. package/v2Containers/WebPush/Create/preview/assets/windows-close-icon.svg +9 -0
  198. package/v2Containers/WebPush/Create/preview/assets/windows-triple-dot-icon.svg +9 -0
  199. package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +51 -0
  200. package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +145 -0
  201. package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +45 -0
  202. package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +68 -0
  203. package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +61 -0
  204. package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +99 -0
  205. package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +733 -0
  206. package/v2Containers/WebPush/Create/preview/components/tests/WindowsChromeExpanded.test.js +571 -0
  207. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +85 -0
  208. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/WindowsChromeExpanded.test.js.snap +81 -0
  209. package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +50 -0
  210. package/v2Containers/WebPush/Create/preview/constants.js +637 -0
  211. package/v2Containers/WebPush/Create/preview/notification-container.scss +79 -0
  212. package/v2Containers/WebPush/Create/preview/preview.scss +358 -0
  213. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +370 -0
  214. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +12 -0
  215. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +12 -0
  216. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +12 -0
  217. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +47 -0
  218. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +11 -0
  219. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +11 -0
  220. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +11 -0
  221. package/v2Containers/WebPush/Create/preview/styles/_base.scss +207 -0
  222. package/v2Containers/WebPush/Create/preview/styles/_ios.scss +153 -0
  223. package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +107 -0
  224. package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +101 -0
  225. package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +229 -0
  226. package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +906 -0
  227. package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +1081 -0
  228. package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +723 -0
  229. package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +1327 -0
  230. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +131 -0
  231. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +112 -0
  232. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +144 -0
  233. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +129 -0
  234. package/v2Containers/WebPush/Create/utils/payloadBuilder.js +96 -0
  235. package/v2Containers/WebPush/Create/utils/payloadBuilder.test.js +396 -0
  236. package/v2Containers/WebPush/Create/utils/previewUtils.js +89 -0
  237. package/v2Containers/WebPush/Create/utils/urlValidation.js +115 -0
  238. package/v2Containers/WebPush/Create/utils/urlValidation.test.js +449 -0
  239. package/v2Containers/WebPush/Create/utils/validation.js +75 -0
  240. package/v2Containers/WebPush/Create/utils/validation.test.js +283 -0
  241. package/v2Containers/WebPush/actions.js +60 -0
  242. package/v2Containers/WebPush/constants.js +132 -0
  243. package/v2Containers/WebPush/index.js +2 -0
  244. package/v2Containers/WebPush/reducer.js +104 -0
  245. package/v2Containers/WebPush/sagas.js +119 -0
  246. package/v2Containers/WebPush/selectors.js +65 -0
  247. package/v2Containers/WebPush/tests/reducer.test.js +863 -0
  248. package/v2Containers/WebPush/tests/sagas.test.js +566 -0
  249. package/v2Containers/WebPush/tests/selectors.test.js +960 -0
  250. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +0 -34
  251. package/v2Components/ErrorInfoNote/constants.js +0 -1
  252. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -870
  253. package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +0 -6
  254. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -277
  255. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -295
  256. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
  257. package/v2Components/HtmlEditor/utils/validationConstants.js +0 -38
  258. package/v2Components/MobilePushPreviewV2/constants.js +0 -6
  259. package/v2Containers/BeePopupEditor/_beePopupEditor.scss +0 -14
  260. package/v2Containers/BeePopupEditor/constants.js +0 -10
  261. package/v2Containers/BeePopupEditor/index.js +0 -194
  262. package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
  263. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1246
  264. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -2472
  265. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +0 -520
  266. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +0 -956
  267. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +0 -376
  268. package/v2Containers/InApp/__tests__/sagas.test.js +0 -363
  269. package/v2Containers/InApp/tests/selectors.test.js +0 -612
  270. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +0 -151
  271. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
  272. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -23
  273. package/v2Containers/InAppWrapper/constants.js +0 -16
  274. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +0 -473
  275. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +0 -198
  276. package/v2Containers/InAppWrapper/index.js +0 -148
  277. package/v2Containers/InAppWrapper/messages.js +0 -49
  278. package/v2Containers/InappAdvance/index.js +0 -1099
  279. package/v2Containers/InappAdvance/index.scss +0 -10
  280. package/v2Containers/InappAdvance/tests/index.test.js +0 -448
@@ -1376,228 +1376,4 @@ describe("validateCarouselCards", () => {
1376
1376
  expect(result.isValid).toBe(true);
1377
1377
  });
1378
1378
  });
1379
-
1380
- describe('extractContent BEE Editor Logic (L404-L412)', () => {
1381
- it('extracts content from beeHtml as string', () => {
1382
- const platformData = {
1383
- title: 'Test Title',
1384
- isBEEeditor: true,
1385
- beeHtml: '<p>BEE HTML Content</p>',
1386
- ctas: [
1387
- { text: 'Click Here', actionLink: 'https://example.com' },
1388
- ],
1389
- };
1390
-
1391
- const result = extractContent(platformData);
1392
-
1393
- expect(result).toContain(platformData.title);
1394
- expect(result).toContain(platformData.beeHtml);
1395
- expect(result).toContain(platformData.ctas[0].text);
1396
- });
1397
-
1398
- it('extracts content from beeHtml as object with value property', () => {
1399
- const platformData = {
1400
- title: 'Test Title',
1401
- isBEEeditor: true,
1402
- beeHtml: { value: '<p>BEE HTML from Object</p>' },
1403
- ctas: [
1404
- { text: 'Button Text' },
1405
- ],
1406
- };
1407
-
1408
- const result = extractContent(platformData);
1409
-
1410
- expect(result).toContain(platformData.title);
1411
- expect(result).toContain(platformData.beeHtml.value);
1412
- expect(result).toContain(platformData.ctas[0].text);
1413
- });
1414
-
1415
- it('handles beeHtml as object without value property', () => {
1416
- const platformData = {
1417
- title: 'Test Title',
1418
- isBEEeditor: true,
1419
- beeHtml: { someOtherProperty: 'data' },
1420
- ctas: [],
1421
- };
1422
-
1423
- const result = extractContent(platformData);
1424
-
1425
- // Should extract title and empty beeHtml (since value is undefined)
1426
- expect(result).toContain('Test Title');
1427
- expect(result).not.toContain('someOtherProperty');
1428
- });
1429
-
1430
- it('extracts ctas with text property', () => {
1431
- const platformData = {
1432
- title: 'Title',
1433
- isBEEeditor: true,
1434
- beeHtml: '<p>Content</p>',
1435
- ctas: [
1436
- { text: 'CTA Text 1' },
1437
- { text: 'CTA Text 2' },
1438
- ],
1439
- };
1440
-
1441
- const result = extractContent(platformData);
1442
-
1443
- expect(result).toContain('CTA Text 1');
1444
- expect(result).toContain('CTA Text 2');
1445
- });
1446
-
1447
- it('extracts ctas with actionLink when text is missing', () => {
1448
- const platformData = {
1449
- title: 'Title',
1450
- isBEEeditor: true,
1451
- beeHtml: '<p>Content</p>',
1452
- ctas: [
1453
- { actionLink: 'https://link1.com' },
1454
- { actionLink: 'https://link2.com' },
1455
- ],
1456
- };
1457
-
1458
- const result = extractContent(platformData);
1459
-
1460
- expect(result).toContain('https://link1.com');
1461
- expect(result).toContain('https://link2.com');
1462
- });
1463
-
1464
- it('filters out falsy values with filter(Boolean)', () => {
1465
- const platformData = {
1466
- title: '',
1467
- isBEEeditor: true,
1468
- beeHtml: null,
1469
- ctas: [
1470
- { text: null, actionLink: null },
1471
- { text: 'Valid Text' },
1472
- ],
1473
- };
1474
-
1475
- const result = extractContent(platformData);
1476
-
1477
- // Should only contain 'Valid Text' after filtering
1478
- expect(result).toBe('Valid Text');
1479
- });
1480
-
1481
- it('handles empty ctas array', () => {
1482
- const platformData = {
1483
- title: 'Title Only',
1484
- isBEEeditor: true,
1485
- beeHtml: '<p>BEE Content</p>',
1486
- ctas: [],
1487
- };
1488
-
1489
- const result = extractContent(platformData);
1490
-
1491
- expect(result).toContain('Title Only');
1492
- expect(result).toContain('<p>BEE Content</p>');
1493
- });
1494
-
1495
- it('handles undefined ctas', () => {
1496
- const platformData = {
1497
- title: 'Title',
1498
- isBEEeditor: true,
1499
- beeHtml: '<p>Content</p>',
1500
- ctas: undefined,
1501
- };
1502
-
1503
- const result = extractContent(platformData);
1504
-
1505
- expect(result).toContain('Title');
1506
- expect(result).toContain('<p>Content</p>');
1507
- });
1508
-
1509
- it('joins all content with spaces', () => {
1510
- const platformData = {
1511
- title: 'Title',
1512
- isBEEeditor: true,
1513
- beeHtml: 'HTML',
1514
- ctas: [
1515
- { text: 'CTA1' },
1516
- { text: 'CTA2' },
1517
- ],
1518
- };
1519
-
1520
- const result = extractContent(platformData);
1521
-
1522
- expect(result).toBe('Title HTML CTA1 CTA2');
1523
- });
1524
-
1525
- it('falls back to regular content when not BEE editor', () => {
1526
- const platformData = {
1527
- title: 'Title',
1528
- message: 'Message',
1529
- isBEEeditor: false,
1530
- beeHtml: '<p>Should be ignored</p>',
1531
- ctas: [
1532
- { text: 'CTA' },
1533
- ],
1534
- };
1535
-
1536
- const result = extractContent(platformData);
1537
-
1538
- expect(result).toContain('Title');
1539
- expect(result).toContain('Message');
1540
- expect(result).toContain('CTA');
1541
- expect(result).not.toContain('<p>Should be ignored</p>');
1542
- });
1543
-
1544
- it('handles null beeHtml', () => {
1545
- const platformData = {
1546
- title: 'Title',
1547
- isBEEeditor: true,
1548
- beeHtml: null,
1549
- ctas: [{ text: 'CTA' }],
1550
- };
1551
-
1552
- const result = extractContent(platformData);
1553
-
1554
- expect(result).toContain('Title');
1555
- expect(result).toContain('CTA');
1556
- });
1557
-
1558
- it('handles undefined beeHtml', () => {
1559
- const platformData = {
1560
- title: 'Title',
1561
- isBEEeditor: true,
1562
- beeHtml: undefined,
1563
- ctas: [],
1564
- };
1565
-
1566
- const result = extractContent(platformData);
1567
-
1568
- expect(result).toBe('Title');
1569
- });
1570
-
1571
- it('handles complex ctas with both text and actionLink', () => {
1572
- const platformData = {
1573
- title: 'Title',
1574
- isBEEeditor: true,
1575
- beeHtml: 'Content',
1576
- ctas: [
1577
- { text: 'CTA Text', actionLink: 'https://example.com' },
1578
- ],
1579
- };
1580
-
1581
- const result = extractContent(platformData);
1582
-
1583
- // Should prefer text over actionLink
1584
- expect(result).toContain('CTA Text');
1585
- expect(result).toContain('Title');
1586
- expect(result).toContain('Content');
1587
- });
1588
-
1589
- it('handles empty string beeHtml', () => {
1590
- const platformData = {
1591
- title: 'Title',
1592
- isBEEeditor: true,
1593
- beeHtml: '',
1594
- ctas: [{ text: 'CTA' }],
1595
- };
1596
-
1597
- const result = extractContent(platformData);
1598
-
1599
- expect(result).toBe('Title CTA');
1600
- });
1601
- });
1602
1379
  });
1603
-
@@ -15,6 +15,7 @@ import {
15
15
  RCS,
16
16
  LINE,
17
17
  VIBER,
18
+ WEBPUSH,
18
19
  } from "../../v2Containers/CreativesContainer/constants";
19
20
 
20
21
  describe("transformerUtils", () => {
@@ -1182,6 +1183,302 @@ describe("transformerUtils", () => {
1182
1183
  });
1183
1184
  });
1184
1185
 
1186
+ describe("WebPush payload transformation", () => {
1187
+ it("should transform WebPush data correctly with minimal data", () => {
1188
+ const mockData = {
1189
+ channel: WEBPUSH,
1190
+ messageSubject: "test webpush notification"
1191
+ };
1192
+
1193
+ const result = transformChannelPayload(mockData);
1194
+
1195
+ expect(result.centralCommsPayload).toBeDefined();
1196
+ expect(result.centralCommsPayload.channel).toEqual(WEBPUSH);
1197
+ expect(result.centralCommsPayload.webpushMessageContent.messageSubject).toEqual(
1198
+ "test webpush notification"
1199
+ );
1200
+ expect(result.centralCommsPayload.clientName).toEqual("VENENO");
1201
+ });
1202
+
1203
+ it("should transform WebPush data with all options", () => {
1204
+ const mockData = {
1205
+ channel: WEBPUSH,
1206
+ messageSubject: "test webpush notification",
1207
+ messageContent: {
1208
+ content: {
1209
+ accountId: 12345,
1210
+ content: {
1211
+ title: "WebPush Title",
1212
+ message: "WebPush Message",
1213
+ iconImageUrl: "https://example.com/icon.png",
1214
+ cta: {
1215
+ actionLink: "https://example.com/action",
1216
+ actionText: "Click Here"
1217
+ },
1218
+ expandableDetails: {
1219
+ style: "BIG_TEXT",
1220
+ message: "Expanded Message"
1221
+ }
1222
+ },
1223
+ offers: [
1224
+ { id: "offer-1", title: "Offer 1" },
1225
+ { id: "offer-2", title: "Offer 2" }
1226
+ ]
1227
+ }
1228
+ }
1229
+ };
1230
+
1231
+ const options = {
1232
+ loyaltyMetaData: {
1233
+ actionId: "action-123",
1234
+ ouId: 456,
1235
+ clientName: "TestClient",
1236
+ module: "TestModule",
1237
+ transformedMessageDetails: {
1238
+ webpushDeliverySettings: {
1239
+ sendDate: "2023-01-01",
1240
+ priority: "HIGH"
1241
+ }
1242
+ }
1243
+ }
1244
+ };
1245
+
1246
+ const result = transformChannelPayload(mockData, options);
1247
+
1248
+ // Check base payload
1249
+ expect(result.centralCommsPayload.sourceEntityId).toEqual("action-123");
1250
+ expect(result.centralCommsPayload.ouId).toEqual(456);
1251
+ expect(result.centralCommsPayload.clientName).toEqual("TestClient");
1252
+ expect(result.centralCommsPayload.module).toEqual("TestModule");
1253
+
1254
+ // Check WebPush-specific content
1255
+ expect(result.centralCommsPayload.webpushMessageContent.channel).toEqual(WEBPUSH);
1256
+ expect(result.centralCommsPayload.webpushMessageContent.accountId).toEqual(12345);
1257
+ expect(result.centralCommsPayload.webpushMessageContent.messageSubject).toEqual(
1258
+ "test webpush notification"
1259
+ );
1260
+ expect(result.centralCommsPayload.webpushMessageContent.content.title).toEqual(
1261
+ "WebPush Title"
1262
+ );
1263
+ expect(result.centralCommsPayload.webpushMessageContent.content.message).toEqual(
1264
+ "WebPush Message"
1265
+ );
1266
+ expect(result.centralCommsPayload.webpushMessageContent.content.iconImageUrl).toEqual(
1267
+ "https://example.com/icon.png"
1268
+ );
1269
+ expect(result.centralCommsPayload.webpushMessageContent.content.cta).toEqual({
1270
+ actionLink: "https://example.com/action",
1271
+ actionText: "Click Here"
1272
+ });
1273
+ expect(result.centralCommsPayload.webpushMessageContent.content.expandableDetails).toEqual({
1274
+ style: "BIG_TEXT",
1275
+ message: "Expanded Message"
1276
+ });
1277
+ expect(result.centralCommsPayload.webpushMessageContent.offers).toEqual([
1278
+ { id: "offer-1", title: "Offer 1" },
1279
+ { id: "offer-2", title: "Offer 2" }
1280
+ ]);
1281
+
1282
+ // Check delivery settings
1283
+ expect(result.centralCommsPayload.webpushDeliverySettings).toEqual({
1284
+ sendDate: "2023-01-01",
1285
+ priority: "HIGH"
1286
+ });
1287
+ });
1288
+
1289
+ it("should handle missing messageContent structure", () => {
1290
+ const mockData = {
1291
+ channel: WEBPUSH,
1292
+ messageSubject: "test webpush notification"
1293
+ };
1294
+
1295
+ const result = transformChannelPayload(mockData);
1296
+
1297
+ expect(result.centralCommsPayload.webpushMessageContent.accountId).toEqual(0);
1298
+ expect(result.centralCommsPayload.webpushMessageContent.content.title).toEqual("");
1299
+ expect(result.centralCommsPayload.webpushMessageContent.content.message).toEqual("");
1300
+ expect(result.centralCommsPayload.webpushMessageContent.offers).toEqual([]);
1301
+ });
1302
+
1303
+ it("should handle missing content properties", () => {
1304
+ const mockData = {
1305
+ channel: WEBPUSH,
1306
+ messageSubject: "test webpush notification",
1307
+ messageContent: {
1308
+ content: {
1309
+ accountId: 12345,
1310
+ content: {}
1311
+ }
1312
+ }
1313
+ };
1314
+
1315
+ const result = transformChannelPayload(mockData);
1316
+
1317
+ expect(result.centralCommsPayload.webpushMessageContent.accountId).toEqual(12345);
1318
+ expect(result.centralCommsPayload.webpushMessageContent.content.title).toEqual("");
1319
+ expect(result.centralCommsPayload.webpushMessageContent.content.message).toEqual("");
1320
+ expect(result.centralCommsPayload.webpushMessageContent.content.iconImageUrl).toBeUndefined();
1321
+ expect(result.centralCommsPayload.webpushMessageContent.content.cta).toBeUndefined();
1322
+ expect(result.centralCommsPayload.webpushMessageContent.content.expandableDetails).toBeUndefined();
1323
+ });
1324
+
1325
+ it("should conditionally include iconImageUrl only when present", () => {
1326
+ const mockDataWithoutIcon = {
1327
+ channel: WEBPUSH,
1328
+ messageSubject: "test",
1329
+ messageContent: {
1330
+ content: {
1331
+ content: {
1332
+ title: "Title",
1333
+ message: "Message"
1334
+ }
1335
+ }
1336
+ }
1337
+ };
1338
+
1339
+ const resultWithoutIcon = transformChannelPayload(mockDataWithoutIcon);
1340
+ expect(resultWithoutIcon.centralCommsPayload.webpushMessageContent.content.iconImageUrl).toBeUndefined();
1341
+
1342
+ const mockDataWithIcon = {
1343
+ channel: WEBPUSH,
1344
+ messageSubject: "test",
1345
+ messageContent: {
1346
+ content: {
1347
+ content: {
1348
+ title: "Title",
1349
+ message: "Message",
1350
+ iconImageUrl: "https://example.com/icon.png"
1351
+ }
1352
+ }
1353
+ }
1354
+ };
1355
+
1356
+ const resultWithIcon = transformChannelPayload(mockDataWithIcon);
1357
+ expect(resultWithIcon.centralCommsPayload.webpushMessageContent.content.iconImageUrl).toEqual(
1358
+ "https://example.com/icon.png"
1359
+ );
1360
+ });
1361
+
1362
+ it("should conditionally include cta only when present", () => {
1363
+ const mockDataWithoutCta = {
1364
+ channel: WEBPUSH,
1365
+ messageSubject: "test",
1366
+ messageContent: {
1367
+ content: {
1368
+ content: {
1369
+ title: "Title",
1370
+ message: "Message"
1371
+ }
1372
+ }
1373
+ }
1374
+ };
1375
+
1376
+ const resultWithoutCta = transformChannelPayload(mockDataWithoutCta);
1377
+ expect(resultWithoutCta.centralCommsPayload.webpushMessageContent.content.cta).toBeUndefined();
1378
+
1379
+ const mockDataWithCta = {
1380
+ channel: WEBPUSH,
1381
+ messageSubject: "test",
1382
+ messageContent: {
1383
+ content: {
1384
+ content: {
1385
+ title: "Title",
1386
+ message: "Message",
1387
+ cta: {
1388
+ actionLink: "https://example.com",
1389
+ actionText: "Click"
1390
+ }
1391
+ }
1392
+ }
1393
+ }
1394
+ };
1395
+
1396
+ const resultWithCta = transformChannelPayload(mockDataWithCta);
1397
+ expect(resultWithCta.centralCommsPayload.webpushMessageContent.content.cta).toEqual({
1398
+ actionLink: "https://example.com",
1399
+ actionText: "Click"
1400
+ });
1401
+ });
1402
+
1403
+ it("should conditionally include expandableDetails only when present", () => {
1404
+ const mockDataWithoutExpandable = {
1405
+ channel: WEBPUSH,
1406
+ messageSubject: "test",
1407
+ messageContent: {
1408
+ content: {
1409
+ content: {
1410
+ title: "Title",
1411
+ message: "Message"
1412
+ }
1413
+ }
1414
+ }
1415
+ };
1416
+
1417
+ const resultWithoutExpandable = transformChannelPayload(mockDataWithoutExpandable);
1418
+ expect(resultWithoutExpandable.centralCommsPayload.webpushMessageContent.content.expandableDetails).toBeUndefined();
1419
+
1420
+ const mockDataWithExpandable = {
1421
+ channel: WEBPUSH,
1422
+ messageSubject: "test",
1423
+ messageContent: {
1424
+ content: {
1425
+ content: {
1426
+ title: "Title",
1427
+ message: "Message",
1428
+ expandableDetails: {
1429
+ style: "BIG_TEXT",
1430
+ message: "Expanded"
1431
+ }
1432
+ }
1433
+ }
1434
+ }
1435
+ };
1436
+
1437
+ const resultWithExpandable = transformChannelPayload(mockDataWithExpandable);
1438
+ expect(resultWithExpandable.centralCommsPayload.webpushMessageContent.content.expandableDetails).toEqual({
1439
+ style: "BIG_TEXT",
1440
+ message: "Expanded"
1441
+ });
1442
+ });
1443
+
1444
+ it("should handle undefined webpushDeliverySettings", () => {
1445
+ const mockData = {
1446
+ channel: WEBPUSH,
1447
+ messageSubject: "test webpush notification"
1448
+ };
1449
+
1450
+ const options = {
1451
+ loyaltyMetaData: {
1452
+ transformedMessageDetails: {}
1453
+ }
1454
+ };
1455
+
1456
+ const result = transformChannelPayload(mockData, options);
1457
+
1458
+ expect(result.centralCommsPayload.webpushDeliverySettings).toEqual({});
1459
+ });
1460
+
1461
+ it("should handle empty offers array", () => {
1462
+ const mockData = {
1463
+ channel: WEBPUSH,
1464
+ messageSubject: "test",
1465
+ messageContent: {
1466
+ content: {
1467
+ content: {
1468
+ title: "Title",
1469
+ message: "Message"
1470
+ },
1471
+ offers: []
1472
+ }
1473
+ }
1474
+ };
1475
+
1476
+ const result = transformChannelPayload(mockData);
1477
+
1478
+ expect(result.centralCommsPayload.webpushMessageContent.offers).toEqual([]);
1479
+ });
1480
+ });
1481
+
1185
1482
  describe("getTemplateDiffState", () => {
1186
1483
  it("should return false for unsupported channel", () => {
1187
1484
  const result = getTemplateDiffState("UNSUPPORTED_CHANNEL", {}, {});
@@ -101,6 +101,7 @@ export async function transformTemplateConfigWithMediaDetails(templateConfig, ch
101
101
  const contentType = detectMediaContentType(templateConfig);
102
102
 
103
103
  if (contentType === MEDIA_CONTENT_TYPE.NONE) {
104
+ console.log('No media content detected, returning original config');
104
105
  return templateConfig;
105
106
  }
106
107
 
@@ -108,19 +109,24 @@ export async function transformTemplateConfigWithMediaDetails(templateConfig, ch
108
109
  let transformDirection;
109
110
  if (forceDirection) {
110
111
  transformDirection = forceDirection;
112
+ console.log(`Forced transformation direction: ${transformDirection}`);
111
113
  } else {
112
114
  // Auto-detect based on content
113
115
  if (contentType === MEDIA_CONTENT_TYPE.URLS) {
114
116
  transformDirection = TRANSFORM_DIRECTION.FORWARD; // URLs → tags
117
+ console.log('Detected URLs, applying forward transformation (URLs → tags)');
115
118
  } else if (contentType === MEDIA_CONTENT_TYPE.TAGS) {
116
119
  transformDirection = TRANSFORM_DIRECTION.REVERSE; // tags → URLs
120
+ console.log('Detected media_content tags, applying reverse transformation (tags → URLs)');
117
121
  } else if (contentType === MEDIA_CONTENT_TYPE.MIXED) {
118
122
  transformDirection = TRANSFORM_DIRECTION.SMART; // Handle mixed content intelligently
123
+ console.log('Detected mixed content, applying smart transformation');
119
124
  }
120
125
  }
121
126
 
122
127
  const newConfig = cloneDeep(templateConfig);
123
128
  try {
129
+ console.log(`Fetching media details for ${transformDirection} transformation, ID: ${mediaDetailsId}`);
124
130
 
125
131
  // Fetch media details mapping from API
126
132
  const response = await getMediaDetails({ id: mediaDetailsId })
@@ -139,6 +145,7 @@ export async function transformTemplateConfigWithMediaDetails(templateConfig, ch
139
145
  idToUrlMapping[mediaId] = url;
140
146
  });
141
147
 
148
+ console.log(`Processing ${Object.keys(urlToIdMapping).length} media mappings`);
142
149
 
143
150
  // Apply transformations based on direction
144
151
  newConfig?.cards?.forEach(card => {
@@ -150,6 +157,7 @@ export async function transformTemplateConfigWithMediaDetails(templateConfig, ch
150
157
  // Forward transformation: URL → tag
151
158
  const mediaDetailId = urlToIdMapping[currentUrl];
152
159
  if (mediaDetailId) {
160
+ console.log(`Forward: ${currentUrl} → {{media_content(${mediaDetailId})}}`);
153
161
  card.media.url = `{{media_content(${mediaDetailId})}}`;
154
162
  } else {
155
163
  console.warn(`No media detail ID found for URL: ${currentUrl}`);
@@ -161,6 +169,7 @@ export async function transformTemplateConfigWithMediaDetails(templateConfig, ch
161
169
  if (mediaId) {
162
170
  const actualUrl = idToUrlMapping[mediaId];
163
171
  if (actualUrl) {
172
+ console.log(`Reverse: {{media_content(${mediaId})}} → ${actualUrl}`);
164
173
  card.media.url = actualUrl;
165
174
  } else {
166
175
  console.warn(`No URL found for media ID: ${mediaId}`);
@@ -176,6 +185,7 @@ export async function transformTemplateConfigWithMediaDetails(templateConfig, ch
176
185
  console.error('Failed to fetch media details for transformation:', error);
177
186
 
178
187
  // Fallback: try to extract/convert what we can without API
188
+ console.log('Falling back to URL extraction method');
179
189
  newConfig.cards.forEach(card => {
180
190
  if (card.media && card.media.url) {
181
191
  if (transformDirection === TRANSFORM_DIRECTION.FORWARD) {
@@ -10,6 +10,7 @@ import {
10
10
  RCS,
11
11
  LINE,
12
12
  VIBER,
13
+ WEBPUSH,
13
14
  EMF,
14
15
  VENENO,
15
16
  TEXT,
@@ -63,6 +64,8 @@ export const transformChannelPayload = (data, options = {}) => {
63
64
  return transformLinePayload(data, options);
64
65
  case VIBER:
65
66
  return transformViberPayload(data, options);
67
+ case WEBPUSH:
68
+ return transformWebpushPayload(data, options);
66
69
  default:
67
70
  return data; // Return unchanged for unsupported channels
68
71
  }
@@ -317,6 +320,43 @@ const transformViberPayload = (viberData, options = {}) => {
317
320
  return payload;
318
321
  };
319
322
 
323
+ /**
324
+ * Transforms WebPush data to the required payload format
325
+ * @param {Object} webpushData - Current WebPush data
326
+ * @param {Object} options - Additional options (ouId, sourceEntityId, etc.)
327
+ * @returns {Object} - Transformed WebPush payload
328
+ */
329
+ const transformWebpushPayload = (webpushData, options = {}) => {
330
+ const { loyaltyMetaData = {} } = options;
331
+ const { transformedMessageDetails = {} } = loyaltyMetaData;
332
+ const { webpushDeliverySettings = {} } = transformedMessageDetails || {};
333
+
334
+ // Get base payload structure
335
+ const payload = createBasePayload(WEBPUSH, loyaltyMetaData);
336
+
337
+ // Extract webpush content from messageContent.content.content structure
338
+ const webpushContent = webpushData?.messageContent?.content?.content || {};
339
+ const accountId = webpushData?.messageContent?.content?.accountId || 0;
340
+
341
+ // Add WebPush-specific properties
342
+ payload.centralCommsPayload.webpushMessageContent = {
343
+ channel: WEBPUSH,
344
+ accountId,
345
+ content: {
346
+ title: webpushContent?.title || '',
347
+ message: webpushContent?.message || '',
348
+ ...(webpushContent?.iconImageUrl && { iconImageUrl: webpushContent.iconImageUrl }),
349
+ ...(webpushContent?.cta && { cta: webpushContent.cta }),
350
+ ...(webpushContent?.expandableDetails && { expandableDetails: webpushContent.expandableDetails }),
351
+ },
352
+ messageSubject: webpushData?.messageSubject || "",
353
+ offers: webpushData?.messageContent?.content?.offers || [],
354
+ };
355
+ payload.centralCommsPayload.webpushDeliverySettings = webpushDeliverySettings;
356
+
357
+ return payload;
358
+ };
359
+
320
360
  // Checks if the template has changed
321
361
  export const getTemplateDiffState = (channel, oldData, newData) => {
322
362
  switch (channel.toUpperCase()) {