@capillarytech/creatives-library 8.0.264 → 8.0.266-alpha.0
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.
- package/assets/Android.png +0 -0
- package/assets/iOS.png +0 -0
- package/constants/unified.js +2 -2
- package/initialReducer.js +2 -0
- package/package.json +1 -1
- package/services/api.js +10 -5
- package/services/tests/api.test.js +34 -0
- package/tests/integration/TemplateCreation/TemplateCreation.integration.test.js +17 -35
- package/tests/integration/TemplateCreation/api-response.js +31 -1
- package/tests/integration/TemplateCreation/msw-handler.js +2 -0
- package/utils/common.js +5 -6
- package/utils/commonUtils.js +28 -5
- package/utils/tagValidations.js +1 -2
- package/utils/tests/commonUtil.test.js +224 -0
- package/utils/tests/transformerUtils.test.js +0 -297
- package/utils/transformTemplateConfig.js +0 -10
- package/utils/transformerUtils.js +0 -40
- package/v2Components/CapDeviceContent/index.js +61 -56
- package/v2Components/CapImageUpload/constants.js +0 -2
- package/v2Components/CapImageUpload/index.js +16 -65
- package/v2Components/CapImageUpload/index.scss +1 -4
- package/v2Components/CapImageUpload/messages.js +1 -5
- package/v2Components/CapTagList/index.js +6 -1
- package/v2Components/CapTagListWithInput/index.js +5 -1
- package/v2Components/CapTagListWithInput/messages.js +1 -1
- package/v2Components/CapWhatsappCTA/tests/index.test.js +5 -0
- package/v2Components/CommonTestAndPreview/UnifiedPreview/_unifiedPreview.scss +2 -2
- package/v2Components/ErrorInfoNote/constants.js +1 -0
- package/v2Components/ErrorInfoNote/index.js +402 -72
- package/v2Components/ErrorInfoNote/messages.js +32 -6
- package/v2Components/ErrorInfoNote/style.scss +278 -6
- package/v2Components/FormBuilder/index.js +8 -8
- package/v2Components/FormBuilder/tests/index.test.js +13 -4
- package/v2Components/HtmlEditor/HTMLEditor.js +418 -99
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +870 -0
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +1882 -133
- package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +27 -16
- package/v2Components/HtmlEditor/_htmlEditor.scss +108 -45
- package/v2Components/HtmlEditor/_index.lazy.scss +0 -1
- package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +23 -102
- package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +148 -140
- package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +2 -1
- package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
- package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +9 -1
- package/v2Components/HtmlEditor/components/EditorToolbar/index.js +31 -6
- package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +22 -0
- package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +4 -7
- package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +35 -45
- package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +1 -3
- package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
- package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +7 -6
- package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +7 -10
- package/v2Components/HtmlEditor/components/PreviewPane/index.js +22 -43
- package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/_validationErrorDisplay.scss +18 -0
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +36 -31
- package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +46 -34
- package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +6 -0
- package/v2Components/HtmlEditor/components/ValidationPanel/index.js +52 -46
- package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +277 -0
- package/v2Components/HtmlEditor/components/ValidationTabs/index.js +295 -0
- package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +51 -0
- package/v2Components/HtmlEditor/constants.js +45 -20
- package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +373 -16
- package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +351 -16
- package/v2Components/HtmlEditor/hooks/useEditorContent.js +5 -2
- package/v2Components/HtmlEditor/hooks/useInAppContent.js +88 -146
- package/v2Components/HtmlEditor/hooks/useValidation.js +213 -56
- package/v2Components/HtmlEditor/index.js +1 -1
- package/v2Components/HtmlEditor/messages.js +102 -94
- package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +214 -45
- package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +134 -0
- package/v2Components/HtmlEditor/utils/contentSanitizer.js +40 -41
- package/v2Components/HtmlEditor/utils/htmlValidator.js +71 -72
- package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +158 -124
- package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +23 -25
- package/v2Components/HtmlEditor/utils/validationAdapter.js +66 -41
- package/v2Components/HtmlEditor/utils/validationConstants.js +38 -0
- package/v2Components/MobilePushPreviewV2/constants.js +6 -0
- package/v2Components/MobilePushPreviewV2/index.js +33 -7
- package/v2Components/TemplatePreview/_templatePreview.scss +55 -24
- package/v2Components/TemplatePreview/index.js +47 -32
- package/v2Components/TemplatePreview/messages.js +4 -0
- package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +1 -0
- package/v2Containers/App/constants.js +0 -5
- package/v2Containers/BeeEditor/index.js +172 -90
- package/v2Containers/BeePopupEditor/_beePopupEditor.scss +14 -0
- package/v2Containers/BeePopupEditor/constants.js +10 -0
- package/v2Containers/BeePopupEditor/index.js +194 -0
- package/v2Containers/BeePopupEditor/tests/index.test.js +627 -0
- package/v2Containers/CreativesContainer/SlideBoxContent.js +129 -108
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +163 -13
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -2
- package/v2Containers/CreativesContainer/constants.js +1 -3
- package/v2Containers/CreativesContainer/index.js +240 -214
- package/v2Containers/CreativesContainer/messages.js +8 -4
- package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +0 -210
- package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +11 -2
- package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +38 -354
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +103 -0
- package/v2Containers/Email/actions.js +7 -0
- package/v2Containers/Email/constants.js +5 -1
- package/v2Containers/Email/index.js +241 -32
- package/v2Containers/Email/messages.js +32 -0
- package/v2Containers/Email/reducer.js +12 -1
- package/v2Containers/Email/sagas.js +61 -7
- package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +2 -0
- package/v2Containers/Email/tests/reducer.test.js +46 -0
- package/v2Containers/Email/tests/sagas.test.js +320 -29
- package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +1246 -0
- package/v2Containers/EmailWrapper/components/EmailWrapperView.js +211 -21
- package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +40 -74
- package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +2472 -0
- package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +520 -0
- package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +2 -67
- package/v2Containers/EmailWrapper/constants.js +2 -0
- package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +629 -77
- package/v2Containers/EmailWrapper/index.js +103 -23
- package/v2Containers/EmailWrapper/messages.js +65 -1
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +956 -0
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +594 -77
- package/v2Containers/FTP/index.js +1 -1
- package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +376 -0
- package/v2Containers/InApp/__tests__/sagas.test.js +363 -0
- package/v2Containers/InApp/actions.js +7 -0
- package/v2Containers/InApp/constants.js +20 -4
- package/v2Containers/InApp/index.js +802 -360
- package/v2Containers/InApp/index.scss +4 -3
- package/v2Containers/InApp/messages.js +7 -3
- package/v2Containers/InApp/reducer.js +21 -3
- package/v2Containers/InApp/sagas.js +29 -9
- package/v2Containers/InApp/selectors.js +25 -5
- package/v2Containers/InApp/tests/index.test.js +154 -50
- package/v2Containers/InApp/tests/reducer.test.js +34 -0
- package/v2Containers/InApp/tests/sagas.test.js +61 -9
- package/v2Containers/InApp/tests/selectors.test.js +612 -0
- package/v2Containers/InAppWrapper/components/InAppWrapperView.js +151 -0
- package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +267 -0
- package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +23 -0
- package/v2Containers/InAppWrapper/constants.js +16 -0
- package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +473 -0
- package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +198 -0
- package/v2Containers/InAppWrapper/index.js +148 -0
- package/v2Containers/InAppWrapper/messages.js +49 -0
- package/v2Containers/InappAdvance/index.js +1099 -0
- package/v2Containers/InappAdvance/index.scss +10 -0
- package/v2Containers/InappAdvance/tests/index.test.js +448 -0
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +3 -0
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -0
- package/v2Containers/Line/Container/Text/index.js +0 -1
- package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +2 -0
- package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +9 -0
- package/v2Containers/MobilePushNew/index.js +0 -1
- package/v2Containers/Rcs/index.js +0 -3
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +12 -0
- package/v2Containers/SmsTrai/Edit/index.js +0 -1
- package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -0
- package/v2Containers/TagList/index.js +62 -19
- package/v2Containers/Templates/ChannelTypeIllustration.js +1 -13
- package/v2Containers/Templates/_templates.scss +56 -202
- package/v2Containers/Templates/actions.js +1 -2
- package/v2Containers/Templates/constants.js +0 -1
- package/v2Containers/Templates/index.js +123 -278
- package/v2Containers/Templates/messages.js +4 -24
- package/v2Containers/Templates/reducer.js +0 -2
- package/v2Containers/Templates/tests/index.test.js +0 -10
- package/v2Containers/TemplatesV2/TemplatesV2.style.js +4 -2
- package/v2Containers/TemplatesV2/index.js +7 -15
- package/v2Containers/TemplatesV2/messages.js +0 -4
- package/v2Containers/Viber/index.js +0 -1
- package/v2Containers/Whatsapp/index.js +0 -1
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +34 -0
- package/v2Containers/Zalo/index.js +0 -1
- package/v2Containers/Zalo/tests/index.test.js +5 -1
- package/utils/imageUrlUpload.js +0 -141
- package/v2Components/CapImageUrlUpload/constants.js +0 -26
- package/v2Components/CapImageUrlUpload/index.js +0 -365
- package/v2Components/CapImageUrlUpload/index.scss +0 -35
- package/v2Components/CapImageUrlUpload/messages.js +0 -47
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +0 -152
- package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +0 -214
- package/v2Containers/WebPush/Create/components/BrandIconSection.js +0 -108
- package/v2Containers/WebPush/Create/components/ButtonForm.js +0 -172
- package/v2Containers/WebPush/Create/components/ButtonItem.js +0 -101
- package/v2Containers/WebPush/Create/components/ButtonList.js +0 -145
- package/v2Containers/WebPush/Create/components/ButtonsLinksSection.js +0 -164
- package/v2Containers/WebPush/Create/components/ButtonsLinksSection.test.js +0 -463
- package/v2Containers/WebPush/Create/components/FormActions.js +0 -54
- package/v2Containers/WebPush/Create/components/FormActions.test.js +0 -163
- package/v2Containers/WebPush/Create/components/MediaSection.js +0 -142
- package/v2Containers/WebPush/Create/components/MediaSection.test.js +0 -341
- package/v2Containers/WebPush/Create/components/MessageSection.js +0 -103
- package/v2Containers/WebPush/Create/components/MessageSection.test.js +0 -268
- package/v2Containers/WebPush/Create/components/NotificationTitleSection.js +0 -87
- package/v2Containers/WebPush/Create/components/NotificationTitleSection.test.js +0 -210
- package/v2Containers/WebPush/Create/components/TemplateNameSection.js +0 -54
- package/v2Containers/WebPush/Create/components/TemplateNameSection.test.js +0 -143
- package/v2Containers/WebPush/Create/components/__snapshots__/ButtonsLinksSection.test.js.snap +0 -86
- package/v2Containers/WebPush/Create/components/__snapshots__/FormActions.test.js.snap +0 -16
- package/v2Containers/WebPush/Create/components/__snapshots__/MediaSection.test.js.snap +0 -41
- package/v2Containers/WebPush/Create/components/__snapshots__/MessageSection.test.js.snap +0 -54
- package/v2Containers/WebPush/Create/components/__snapshots__/NotificationTitleSection.test.js.snap +0 -37
- package/v2Containers/WebPush/Create/components/__snapshots__/TemplateNameSection.test.js.snap +0 -21
- package/v2Containers/WebPush/Create/components/_buttons.scss +0 -246
- package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +0 -554
- package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +0 -607
- package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +0 -633
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +0 -666
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +0 -74
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +0 -78
- package/v2Containers/WebPush/Create/hooks/useButtonManagement.js +0 -138
- package/v2Containers/WebPush/Create/hooks/useButtonManagement.test.js +0 -406
- package/v2Containers/WebPush/Create/hooks/useCharacterCount.js +0 -30
- package/v2Containers/WebPush/Create/hooks/useCharacterCount.test.js +0 -151
- package/v2Containers/WebPush/Create/hooks/useImageUpload.js +0 -104
- package/v2Containers/WebPush/Create/hooks/useImageUpload.test.js +0 -538
- package/v2Containers/WebPush/Create/hooks/useTagManagement.js +0 -122
- package/v2Containers/WebPush/Create/hooks/useTagManagement.test.js +0 -633
- package/v2Containers/WebPush/Create/index.js +0 -1148
- package/v2Containers/WebPush/Create/index.scss +0 -134
- package/v2Containers/WebPush/Create/messages.js +0 -211
- package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +0 -228
- package/v2Containers/WebPush/Create/preview/NotificationContainer.js +0 -294
- package/v2Containers/WebPush/Create/preview/PreviewContent.js +0 -90
- package/v2Containers/WebPush/Create/preview/PreviewControls.js +0 -305
- package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +0 -25
- package/v2Containers/WebPush/Create/preview/WebPushPreview.js +0 -155
- package/v2Containers/WebPush/Create/preview/assets/Light.svg +0 -53
- package/v2Containers/WebPush/Create/preview/assets/Top.svg +0 -5
- package/v2Containers/WebPush/Create/preview/assets/android-arrow-down.svg +0 -9
- package/v2Containers/WebPush/Create/preview/assets/android-arrow-up.svg +0 -9
- package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
- package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
- package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +0 -106
- package/v2Containers/WebPush/Create/preview/assets/iOS.svg +0 -26
- package/v2Containers/WebPush/Create/preview/assets/macos-arrow-down-icon.svg +0 -9
- package/v2Containers/WebPush/Create/preview/assets/macos-triple-dot-icon.svg +0 -9
- package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +0 -18
- package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +0 -29
- package/v2Containers/WebPush/Create/preview/assets/windows-close-icon.svg +0 -9
- package/v2Containers/WebPush/Create/preview/assets/windows-triple-dot-icon.svg +0 -9
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +0 -51
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +0 -145
- package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +0 -45
- package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +0 -68
- package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +0 -61
- package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +0 -99
- package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +0 -733
- package/v2Containers/WebPush/Create/preview/components/tests/WindowsChromeExpanded.test.js +0 -571
- package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +0 -85
- package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/WindowsChromeExpanded.test.js.snap +0 -81
- package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +0 -50
- package/v2Containers/WebPush/Create/preview/constants.js +0 -637
- package/v2Containers/WebPush/Create/preview/notification-container.scss +0 -79
- package/v2Containers/WebPush/Create/preview/preview.scss +0 -358
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +0 -370
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +0 -47
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_base.scss +0 -207
- package/v2Containers/WebPush/Create/preview/styles/_ios.scss +0 -153
- package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +0 -107
- package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +0 -101
- package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +0 -229
- package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +0 -909
- package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +0 -1081
- package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +0 -723
- package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +0 -1327
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +0 -131
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +0 -112
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +0 -144
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +0 -129
- package/v2Containers/WebPush/Create/utils/payloadBuilder.js +0 -96
- package/v2Containers/WebPush/Create/utils/payloadBuilder.test.js +0 -396
- package/v2Containers/WebPush/Create/utils/previewUtils.js +0 -89
- package/v2Containers/WebPush/Create/utils/urlValidation.js +0 -115
- package/v2Containers/WebPush/Create/utils/urlValidation.test.js +0 -449
- package/v2Containers/WebPush/Create/utils/validation.js +0 -76
- package/v2Containers/WebPush/Create/utils/validation.test.js +0 -283
- package/v2Containers/WebPush/actions.js +0 -60
- package/v2Containers/WebPush/constants.js +0 -132
- package/v2Containers/WebPush/index.js +0 -2
- package/v2Containers/WebPush/reducer.js +0 -104
- package/v2Containers/WebPush/sagas.js +0 -119
- package/v2Containers/WebPush/selectors.js +0 -65
- package/v2Containers/WebPush/tests/reducer.test.js +0 -863
- package/v2Containers/WebPush/tests/sagas.test.js +0 -566
- package/v2Containers/WebPush/tests/selectors.test.js +0 -960
package/assets/Android.png
CHANGED
|
Binary file
|
package/assets/iOS.png
CHANGED
|
Binary file
|
package/constants/unified.js
CHANGED
|
@@ -45,13 +45,13 @@ export const GIFT_CARDS = 'GIFT_CARDS';
|
|
|
45
45
|
export const PROMO_ENGINE = 'PROMO_ENGINE';
|
|
46
46
|
export const LIQUID_SUPPORT = 'ENABLE_LIQUID_SUPPORT';
|
|
47
47
|
export const ENABLE_NEW_MPUSH = 'ENABLE_NEW_MPUSH';
|
|
48
|
+
export const SUPPORT_CK_EDITOR = 'SUPPORT_CK_EDITOR';
|
|
48
49
|
export const CUSTOM_TAG = 'CustomTagMessage';
|
|
49
50
|
export const CUSTOMER_EXTENDED_FIELD = 'Customer extended fields';
|
|
50
51
|
export const EXTENDED_TAG = 'ExtendedTagMessage';
|
|
51
52
|
export const BADGES_UI_ENABLED = 'BADGES_UI_ENABLED';
|
|
52
53
|
export const JP_LOCALE_HIDE_FEATURE = 'JP_LOCALE_HIDE_FEATURE';
|
|
53
54
|
export const ENABLE_WECHAT = 'ENABLE_WECHAT';
|
|
54
|
-
export const ENABLE_WEBPUSH = 'ENABLE_WEBPUSH';
|
|
55
55
|
export const ENABLE_CUSTOMER_BARCODE_TAG = 'ENABLE_CUSTOMER_BARCODE_TAG';
|
|
56
56
|
export const EMAIL_UNSUBSCRIBE_TAG_MANDATORY = 'EMAIL_UNSUBSCRIBE_TAG_MANDATORY';
|
|
57
57
|
export const ENABLE_AI_SUGGESTIONS = 'ENABLE_AI_SUGGESTIONS';
|
|
@@ -169,7 +169,7 @@ export const JAPANESE_HIDE_DATE_TAGS = [
|
|
|
169
169
|
"dd.mm.yy",
|
|
170
170
|
"dd Mon",
|
|
171
171
|
"dd/m/yyyy",
|
|
172
|
-
];
|
|
172
|
+
];
|
|
173
173
|
|
|
174
174
|
export const LIQUID_SUPPORTED_CHANNELS = [EMAIL, SMS, MOBILE_PUSH, INAPP];
|
|
175
175
|
|
package/initialReducer.js
CHANGED
|
@@ -15,6 +15,7 @@ import galleryReducer from './v2Containers/Assets/Gallery/reducer';
|
|
|
15
15
|
import CapCollapsibleLeftNavigationReducer from '@capillarytech/cap-ui-library/CapCollapsibleLeftNavigation/reducer';
|
|
16
16
|
import { AIRA_REDUCER_DOMAIN, askAiraReducer } from '@capillarytech/cap-ui-library/CapAskAira';
|
|
17
17
|
import previewAndTestReducer from './v2Components/TestAndPreviewSlidebox/reducer';
|
|
18
|
+
import inAppReducer from './v2Containers/InApp/reducer';
|
|
18
19
|
|
|
19
20
|
export const initialReducer = {
|
|
20
21
|
language: languageProviderReducer,
|
|
@@ -33,4 +34,5 @@ export const initialReducer = {
|
|
|
33
34
|
gallery: galleryReducer,
|
|
34
35
|
navigationConfig: CapCollapsibleLeftNavigationReducer,
|
|
35
36
|
previewAndTest: previewAndTestReducer,
|
|
37
|
+
inApp: inAppReducer,
|
|
36
38
|
};
|
package/package.json
CHANGED
package/services/api.js
CHANGED
|
@@ -287,11 +287,6 @@ export const createMobilePushTemplateV2 = (template) => {
|
|
|
287
287
|
return request(url, getAPICallObject('POST', template));
|
|
288
288
|
};
|
|
289
289
|
|
|
290
|
-
export const createWebPushTemplate = (template) => {
|
|
291
|
-
const url = `${API_ENDPOINT}/templates/WEBPUSH`;
|
|
292
|
-
return request(url, getAPICallObject('POST', template));
|
|
293
|
-
};
|
|
294
|
-
|
|
295
290
|
export const duplicateTemplate = ({id, channel}) => {
|
|
296
291
|
const url = `${API_ENDPOINT}/templates/duplicate/${id}/${channel}`;
|
|
297
292
|
return request(url, getAPICallObject('GET'));
|
|
@@ -470,6 +465,11 @@ export const getCmsTemplateSettingsV2 = (cmsType, projectId, cmsMode, langId, is
|
|
|
470
465
|
return API.get(url);
|
|
471
466
|
};
|
|
472
467
|
|
|
468
|
+
export const getCmsAccounts = (cmsType) => {
|
|
469
|
+
const url = `${API_ENDPOINT}/cms/accounts?type=${cmsType}`;
|
|
470
|
+
return API.get(url);
|
|
471
|
+
};
|
|
472
|
+
|
|
473
473
|
export const getCmsTemplateData = (cmsType, projectId, langId) => {
|
|
474
474
|
const url = `${API_ENDPOINT}/cms/getContent?type=${cmsType}&projectId=${projectId}&langId=${langId}`;
|
|
475
475
|
return API.get(url);
|
|
@@ -725,4 +725,9 @@ export const getAssetStatus = (type, assetId) => {
|
|
|
725
725
|
return request(url, getAPICallObject('GET'));
|
|
726
726
|
};
|
|
727
727
|
|
|
728
|
+
export const getBeePopupBuilderToken = () => {
|
|
729
|
+
const url = `${API_ENDPOINT}/common/getInappTokenData`;
|
|
730
|
+
return request(url, getAPICallObject('GET'));
|
|
731
|
+
};
|
|
732
|
+
|
|
728
733
|
export {request, getAPICallObject};
|
|
@@ -26,6 +26,8 @@ import {
|
|
|
26
26
|
updateMetaConfig,
|
|
27
27
|
getMediaDetails,
|
|
28
28
|
getAssetStatus,
|
|
29
|
+
getBeePopupBuilderToken,
|
|
30
|
+
getCmsAccounts,
|
|
29
31
|
} from '../api';
|
|
30
32
|
import { mockData } from './mockData';
|
|
31
33
|
import getSchema from '../getSchema';
|
|
@@ -973,3 +975,35 @@ describe('getAssetStatus', () => {
|
|
|
973
975
|
expect(callArgs[0]).toContain('/assets/video/asset-456/status');
|
|
974
976
|
});
|
|
975
977
|
});
|
|
978
|
+
|
|
979
|
+
describe('getBeePopupBuilderToken', () => {
|
|
980
|
+
it('should return correct response', async () => {
|
|
981
|
+
global.fetch.mockReturnValue(Promise.resolve({
|
|
982
|
+
status: 200,
|
|
983
|
+
json: () => Promise.resolve({
|
|
984
|
+
status: 200,
|
|
985
|
+
response: 'test',
|
|
986
|
+
}),
|
|
987
|
+
}));
|
|
988
|
+
const result = await getBeePopupBuilderToken();
|
|
989
|
+
expect(result).toEqual({
|
|
990
|
+
status: 200,
|
|
991
|
+
response: 'test',
|
|
992
|
+
});
|
|
993
|
+
});
|
|
994
|
+
});
|
|
995
|
+
|
|
996
|
+
describe('getCmsAccounts', () => {
|
|
997
|
+
it('should return a promise (line 473-476)', () => {
|
|
998
|
+
// Similar to other API tests, just verify it returns a Promise
|
|
999
|
+
const result = getCmsAccounts('bee');
|
|
1000
|
+
expect(result).toBeInstanceOf(Promise);
|
|
1001
|
+
});
|
|
1002
|
+
|
|
1003
|
+
it('should be callable with cmsType parameter', () => {
|
|
1004
|
+
// Verify function exists and can be called
|
|
1005
|
+
expect(typeof getCmsAccounts).toBe('function');
|
|
1006
|
+
const result = getCmsAccounts('bee');
|
|
1007
|
+
expect(result).toBeInstanceOf(Promise);
|
|
1008
|
+
});
|
|
1009
|
+
});
|
|
@@ -17,6 +17,7 @@ import { initialReducer } from '../../../initialReducer';
|
|
|
17
17
|
import { mockInitialState } from './mocks/initialState';
|
|
18
18
|
import TemplatesV2 from '../../../v2Containers/TemplatesV2';
|
|
19
19
|
import globalMessages from '../../../v2Containers/Cap/messages';
|
|
20
|
+
import rcsMessages from '../../../v2Containers/Rcs/messages';
|
|
20
21
|
import * as helper from './helper';
|
|
21
22
|
|
|
22
23
|
jest.mock('@capillarytech/cap-ui-utils', () => ({
|
|
@@ -147,13 +148,16 @@ describe("Creatives testing template creation", () => {
|
|
|
147
148
|
fireEvent.change(templateNameInput, {
|
|
148
149
|
target: { value: 'rcs_test_template' },
|
|
149
150
|
});
|
|
150
|
-
const
|
|
151
|
+
const richCardOption = await creativesScreen.findByText(/rich card/i);
|
|
152
|
+
fireEvent.click(richCardOption);
|
|
153
|
+
const imageRadioBtn = await creativesScreen.findByRole('radio', {
|
|
154
|
+
name: /image/i,
|
|
155
|
+
});
|
|
151
156
|
fireEvent.click(imageRadioBtn);
|
|
152
|
-
const imageUploader = await creativesScreen.findByText(
|
|
157
|
+
const imageUploader = await creativesScreen.findByText(
|
|
158
|
+
/drag and drop image here/i,
|
|
159
|
+
);
|
|
153
160
|
expect(imageUploader).toBeInTheDocument();
|
|
154
|
-
const noneRadioBtn = await creativesScreen.findByText(/none/i);
|
|
155
|
-
fireEvent.click(noneRadioBtn);
|
|
156
|
-
expect(imageUploader).not.toBeInTheDocument();
|
|
157
161
|
|
|
158
162
|
// Enter the template title
|
|
159
163
|
const templateTitleInput = await creativesScreen.findByTestId(
|
|
@@ -175,7 +179,7 @@ describe("Creatives testing template creation", () => {
|
|
|
175
179
|
|
|
176
180
|
// click on Done button
|
|
177
181
|
const doneButton = creativesScreen.getByRole('button', {
|
|
178
|
-
name:
|
|
182
|
+
name: rcsMessages.sendForApprovalButtonLabel.defaultMessage,
|
|
179
183
|
});
|
|
180
184
|
await userEvent.click(doneButton);
|
|
181
185
|
expect(createButton).toBeInTheDocument();
|
|
@@ -188,11 +192,13 @@ describe("Creatives testing template creation", () => {
|
|
|
188
192
|
name: /rcs/i,
|
|
189
193
|
});
|
|
190
194
|
await userEvent.click(rcs);
|
|
191
|
-
const createButton = creativesScreen.
|
|
195
|
+
const createButton = await creativesScreen.findByRole('button', {
|
|
192
196
|
name: /create new/i,
|
|
193
197
|
});
|
|
194
198
|
await waitFor(() => expect(createButton).toBeEnabled(),{ timeout: 5000, interval: 100 });
|
|
195
199
|
await userEvent.click(createButton);
|
|
200
|
+
const richCardOption = await creativesScreen.findByText(/rich card/i);
|
|
201
|
+
fireEvent.click(richCardOption);
|
|
196
202
|
const templateNameInput = await creativesScreen.findByTestId(
|
|
197
203
|
/template_name/,
|
|
198
204
|
{},
|
|
@@ -217,38 +223,14 @@ describe("Creatives testing template creation", () => {
|
|
|
217
223
|
fireEvent.change(templateTextInput, {
|
|
218
224
|
target: { value: 'rcs_template_text' },
|
|
219
225
|
});
|
|
220
|
-
const
|
|
221
|
-
|
|
222
|
-
const doneButton = creativesScreen.getByRole('button', {
|
|
223
|
-
name: globalMessages.done.defaultMessage,
|
|
226
|
+
const addButton = creativesScreen.getByRole('button', {
|
|
227
|
+
name: /add button/i,
|
|
224
228
|
});
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
//configuring cta button
|
|
229
|
-
//accessing cta button textBox by char limit
|
|
230
|
-
const textLimit = creativesScreen.getByText(/0 \/ 20/i);
|
|
231
|
-
const ctaBtnText = textLimit.parentElement.previousSibling;
|
|
232
|
-
|
|
233
|
-
//configuring CTA button text and URL
|
|
229
|
+
fireEvent.click(addButton);
|
|
230
|
+
const ctaBtnText = creativesScreen.getByPlaceholderText(/enter button text/i);
|
|
234
231
|
fireEvent.change(ctaBtnText, {
|
|
235
232
|
target: { value: 'cta_button' },
|
|
236
233
|
});
|
|
237
|
-
const ctaLink = await creativesScreen.findByTestId(
|
|
238
|
-
/cta_btn_link/,
|
|
239
|
-
{},
|
|
240
|
-
);
|
|
241
|
-
fireEvent.change(ctaLink, {
|
|
242
|
-
target: { value: 'invalid url' },
|
|
243
|
-
});
|
|
244
|
-
const urlError = creativesScreen.getByText(/button url is not valid/i);
|
|
245
|
-
expect(urlError).toBeInTheDocument();
|
|
246
|
-
fireEvent.change(ctaLink, {
|
|
247
|
-
target: { value: 'https://capillarytech.com/' },
|
|
248
|
-
});
|
|
249
|
-
expect(urlError).not.toBeInTheDocument();
|
|
250
|
-
//saving the template
|
|
251
|
-
fireEvent.click(doneButton);
|
|
252
234
|
expect(createButton).toBeInTheDocument();
|
|
253
235
|
});
|
|
254
236
|
|
|
@@ -1558,6 +1558,25 @@ export const whatsappAccount = {
|
|
|
1558
1558
|
response: []
|
|
1559
1559
|
};
|
|
1560
1560
|
|
|
1561
|
+
export const rcsAccount = {
|
|
1562
|
+
success: true,
|
|
1563
|
+
status: {
|
|
1564
|
+
isError: false,
|
|
1565
|
+
code: 200,
|
|
1566
|
+
message: "success",
|
|
1567
|
+
},
|
|
1568
|
+
message: "WeCRM Account details fetched",
|
|
1569
|
+
response: [
|
|
1570
|
+
{
|
|
1571
|
+
name: "RCS Account",
|
|
1572
|
+
sourceAccountIdentifier: "rcs_account",
|
|
1573
|
+
configs: {
|
|
1574
|
+
accessToken: "rcs_access_token",
|
|
1575
|
+
},
|
|
1576
|
+
},
|
|
1577
|
+
],
|
|
1578
|
+
};
|
|
1579
|
+
|
|
1561
1580
|
export const mpushAccount = {
|
|
1562
1581
|
success: true,
|
|
1563
1582
|
status: {
|
|
@@ -1716,7 +1735,18 @@ export const emailTemplates = {
|
|
|
1716
1735
|
|
|
1717
1736
|
export const domainProperties = {
|
|
1718
1737
|
entity:{
|
|
1719
|
-
WHATSAPP:[]
|
|
1738
|
+
WHATSAPP:[],
|
|
1739
|
+
RCS: [
|
|
1740
|
+
{
|
|
1741
|
+
domainProperties: {
|
|
1742
|
+
hostName: "rcs-host",
|
|
1743
|
+
connectionProperties: {
|
|
1744
|
+
sourceAccountIdentifier: "rcs_account",
|
|
1745
|
+
account_sid: "rcs_account",
|
|
1746
|
+
},
|
|
1747
|
+
},
|
|
1748
|
+
},
|
|
1749
|
+
],
|
|
1720
1750
|
},
|
|
1721
1751
|
warnings:[]
|
|
1722
1752
|
};
|
|
@@ -36,6 +36,8 @@ export const server = setupServer(
|
|
|
36
36
|
rest.get(`${API_ENDPOINT}/meta/wecrm`, (req, res, ctx) => {
|
|
37
37
|
const sourceName = req.url.searchParams.get('source_name');
|
|
38
38
|
switch (sourceName) {
|
|
39
|
+
case 'RCS':
|
|
40
|
+
return res(ctx.status(200), ctx.json(apiResponse.rcsAccount));
|
|
39
41
|
case 'WHATSAPP':
|
|
40
42
|
return res(ctx.status(200), ctx.json(apiResponse.whatsappAccount));
|
|
41
43
|
case 'VIBER':
|
package/utils/common.js
CHANGED
|
@@ -21,8 +21,8 @@ import {
|
|
|
21
21
|
EMAIL_UNSUBSCRIBE_TAG_MANDATORY,
|
|
22
22
|
BADGES_ISSUE,
|
|
23
23
|
ENABLE_WECHAT,
|
|
24
|
-
ENABLE_WEBPUSH,
|
|
25
24
|
LIQUID_SUPPORT,
|
|
25
|
+
SUPPORT_CK_EDITOR,
|
|
26
26
|
ENABLE_NEW_MPUSH
|
|
27
27
|
} from '../constants/unified';
|
|
28
28
|
import { apiMessageFormatHandler } from './commonUtils';
|
|
@@ -96,6 +96,10 @@ export const hasLiquidSupportFeature = Auth.hasFeatureAccess.bind(
|
|
|
96
96
|
LIQUID_SUPPORT,
|
|
97
97
|
);
|
|
98
98
|
|
|
99
|
+
export const hasSupportCKEditor = Auth.hasFeatureAccess.bind(
|
|
100
|
+
null,
|
|
101
|
+
SUPPORT_CK_EDITOR,
|
|
102
|
+
);
|
|
99
103
|
|
|
100
104
|
export const hasGiftVoucherFeature = Auth.hasFeatureAccess.bind(
|
|
101
105
|
null,
|
|
@@ -117,11 +121,6 @@ export const hasWechatFeatureEnabled = Auth.hasFeatureAccess.bind(
|
|
|
117
121
|
ENABLE_WECHAT,
|
|
118
122
|
);
|
|
119
123
|
|
|
120
|
-
export const hasWebPushFeatureEnabled = Auth.hasFeatureAccess.bind(
|
|
121
|
-
null,
|
|
122
|
-
ENABLE_WEBPUSH,
|
|
123
|
-
);
|
|
124
|
-
|
|
125
124
|
export const hasCustomerBarcodeFeatureEnabled = Auth.hasFeatureAccess.bind(
|
|
126
125
|
null,
|
|
127
126
|
ENABLE_CUSTOMER_BARCODE_TAG,
|
package/utils/commonUtils.js
CHANGED
|
@@ -173,20 +173,30 @@ export const validateLiquidTemplateContent = async (
|
|
|
173
173
|
// Handle API errors or empty content
|
|
174
174
|
if (result?.errors?.length > 0 || !validString || isError) {
|
|
175
175
|
let standardErrors = [];
|
|
176
|
+
let liquidErrors = [];
|
|
177
|
+
|
|
178
|
+
// Empty content errors are NOT from liquid endpoints, so they go to standardErrors
|
|
176
179
|
if (!validString) {
|
|
177
180
|
standardErrors = [emptyBodyError];
|
|
178
181
|
}
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
+
|
|
183
|
+
// IMPORTANT: Errors from extractTags and liquidValidation endpoints should ALWAYS be categorized as liquidErrors
|
|
184
|
+
// These endpoints are: /extractTags and /ask-aira-service/creatives_ai/liquidValidation
|
|
185
|
+
// Only errors from these endpoints should appear in Liquid Issues tab
|
|
186
|
+
if (result && Array.isArray(result?.errors) && result.errors.length > 0) {
|
|
187
|
+
// Errors from extractTags or liquidValidation endpoints
|
|
188
|
+
liquidErrors = result.errors.map((error) => {
|
|
182
189
|
const message = typeof error?.message === "string"
|
|
183
190
|
? error.message
|
|
184
191
|
: somethingWrongMsg;
|
|
185
192
|
return message;
|
|
186
193
|
});
|
|
187
|
-
} else {
|
|
194
|
+
} else if (isError) {
|
|
195
|
+
// If isError is true, it means the API call to extractTags/liquidValidation failed
|
|
196
|
+
// This is also a liquid endpoint error, so categorize as liquidErrors
|
|
188
197
|
liquidErrors = [somethingWrongMsg];
|
|
189
198
|
}
|
|
199
|
+
|
|
190
200
|
onError({
|
|
191
201
|
standardErrors,
|
|
192
202
|
liquidErrors,
|
|
@@ -398,7 +408,20 @@ export const validateMobilePushContent = async (formData, options) => {
|
|
|
398
408
|
// Helper function to extract content for a platform
|
|
399
409
|
export const extractContent = (platformData) => {
|
|
400
410
|
if (!platformData) return '';
|
|
401
|
-
const { title, message, ctas } = platformData;
|
|
411
|
+
const { title, message, ctas, isBEEeditor, beeHtml } = platformData;
|
|
412
|
+
|
|
413
|
+
// For BEE editor, extract content from beeHtml
|
|
414
|
+
if (isBEEeditor && beeHtml) {
|
|
415
|
+
// beeHtml can be an object with value property or a string
|
|
416
|
+
const beeHtmlContent = typeof beeHtml === 'string' ? beeHtml : (beeHtml?.value || '');
|
|
417
|
+
return [
|
|
418
|
+
title,
|
|
419
|
+
beeHtmlContent,
|
|
420
|
+
...((ctas?.map((cta) => cta?.text || cta?.actionLink)) || []),
|
|
421
|
+
].filter(Boolean).join(' ');
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
// For regular content
|
|
402
425
|
return [
|
|
403
426
|
title,
|
|
404
427
|
message,
|
package/utils/tagValidations.js
CHANGED
|
@@ -187,7 +187,6 @@ export const validateTags = ({
|
|
|
187
187
|
location,
|
|
188
188
|
tagModule,
|
|
189
189
|
eventContextTags,
|
|
190
|
-
isFullMode,
|
|
191
190
|
}) => {
|
|
192
191
|
const tags = tagsParam;
|
|
193
192
|
const injectedTags = transformInjectedTags(injectedTagsParams);
|
|
@@ -201,7 +200,7 @@ export const validateTags = ({
|
|
|
201
200
|
unsupportedTags: [],
|
|
202
201
|
isBraceError: false,
|
|
203
202
|
};
|
|
204
|
-
if (tags && tags.length
|
|
203
|
+
if (tags && tags.length) {
|
|
205
204
|
lodashForEach(tags, ({
|
|
206
205
|
definition: {
|
|
207
206
|
supportedModules,
|
|
@@ -1376,4 +1376,228 @@ 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
|
+
});
|
|
1379
1602
|
});
|
|
1603
|
+
|