@capillarytech/creatives-library 8.0.266-alpha.1 → 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.
- package/assets/Android.png +0 -0
- package/assets/iOS.png +0 -0
- package/constants/unified.js +2 -2
- package/initialReducer.js +0 -2
- package/package.json +1 -1
- package/services/api.js +5 -10
- package/services/tests/api.test.js +0 -34
- package/tests/integration/TemplateCreation/TemplateCreation.integration.test.js +35 -17
- package/tests/integration/TemplateCreation/api-response.js +1 -31
- package/tests/integration/TemplateCreation/msw-handler.js +0 -2
- package/utils/common.js +6 -5
- package/utils/commonUtils.js +5 -28
- package/utils/imageUrlUpload.js +141 -0
- package/utils/tests/commonUtil.test.js +0 -224
- package/utils/tests/transformerUtils.test.js +297 -0
- package/utils/transformTemplateConfig.js +10 -0
- package/utils/transformerUtils.js +40 -0
- package/v2Components/CapDeviceContent/index.js +56 -61
- package/v2Components/CapImageUpload/constants.js +2 -0
- package/v2Components/CapImageUpload/index.js +65 -16
- package/v2Components/CapImageUpload/index.scss +4 -1
- package/v2Components/CapImageUpload/messages.js +5 -1
- package/v2Components/CapImageUrlUpload/constants.js +26 -0
- package/v2Components/CapImageUrlUpload/index.js +365 -0
- package/v2Components/CapImageUrlUpload/index.scss +35 -0
- package/v2Components/CapImageUrlUpload/messages.js +47 -0
- package/v2Components/CapTagList/index.js +1 -6
- package/v2Components/CapTagListWithInput/index.js +1 -5
- package/v2Components/CapTagListWithInput/messages.js +1 -1
- package/v2Components/CapWhatsappCTA/tests/index.test.js +0 -5
- package/v2Components/ErrorInfoNote/index.js +72 -402
- package/v2Components/ErrorInfoNote/messages.js +6 -32
- package/v2Components/ErrorInfoNote/style.scss +6 -278
- package/v2Components/FormBuilder/tests/index.test.js +4 -13
- package/v2Components/HtmlEditor/HTMLEditor.js +99 -418
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1882
- package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +16 -27
- package/v2Components/HtmlEditor/_htmlEditor.scss +45 -108
- package/v2Components/HtmlEditor/_index.lazy.scss +1 -0
- package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +102 -23
- package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +140 -148
- package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
- package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
- package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +1 -9
- package/v2Components/HtmlEditor/components/EditorToolbar/index.js +6 -31
- package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -22
- package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +7 -4
- package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +45 -35
- package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +3 -1
- package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
- package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +6 -7
- package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +10 -7
- package/v2Components/HtmlEditor/components/PreviewPane/index.js +43 -22
- package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +152 -0
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/_validationErrorDisplay.scss +0 -18
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -36
- package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +34 -46
- package/v2Components/HtmlEditor/components/ValidationPanel/index.js +46 -52
- package/v2Components/HtmlEditor/constants.js +20 -45
- package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
- package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +16 -351
- package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
- package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
- package/v2Components/HtmlEditor/hooks/useValidation.js +56 -213
- package/v2Components/HtmlEditor/index.js +1 -1
- package/v2Components/HtmlEditor/messages.js +94 -102
- package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +45 -214
- package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +0 -134
- package/v2Components/HtmlEditor/utils/contentSanitizer.js +41 -40
- package/v2Components/HtmlEditor/utils/htmlValidator.js +72 -71
- package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +124 -158
- package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
- package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -66
- package/v2Components/MobilePushPreviewV2/index.js +7 -33
- package/v2Components/TemplatePreview/_templatePreview.scss +24 -55
- package/v2Components/TemplatePreview/index.js +32 -47
- package/v2Components/TemplatePreview/messages.js +0 -4
- package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
- package/v2Containers/App/constants.js +5 -0
- package/v2Containers/BeeEditor/index.js +90 -172
- package/v2Containers/CreativesContainer/SlideBoxContent.js +108 -129
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +13 -163
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -2
- package/v2Containers/CreativesContainer/constants.js +3 -1
- package/v2Containers/CreativesContainer/index.js +215 -243
- package/v2Containers/CreativesContainer/messages.js +4 -8
- package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +210 -0
- package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +2 -11
- package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +354 -38
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -103
- package/v2Containers/Email/actions.js +0 -7
- package/v2Containers/Email/constants.js +1 -5
- package/v2Containers/Email/index.js +29 -234
- package/v2Containers/Email/messages.js +0 -32
- package/v2Containers/Email/reducer.js +1 -12
- package/v2Containers/Email/sagas.js +7 -61
- package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
- package/v2Containers/Email/tests/reducer.test.js +0 -46
- package/v2Containers/Email/tests/sagas.test.js +29 -320
- package/v2Containers/EmailWrapper/components/EmailWrapperView.js +21 -212
- package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +74 -40
- package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +67 -2
- package/v2Containers/EmailWrapper/constants.js +0 -2
- package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +79 -629
- package/v2Containers/EmailWrapper/index.js +23 -103
- package/v2Containers/EmailWrapper/messages.js +1 -65
- package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +82 -596
- package/v2Containers/InApp/actions.js +0 -7
- package/v2Containers/InApp/constants.js +4 -20
- package/v2Containers/InApp/index.js +359 -802
- package/v2Containers/InApp/index.scss +3 -4
- package/v2Containers/InApp/messages.js +3 -7
- package/v2Containers/InApp/reducer.js +3 -21
- package/v2Containers/InApp/sagas.js +9 -29
- package/v2Containers/InApp/selectors.js +5 -25
- package/v2Containers/InApp/tests/index.test.js +50 -154
- package/v2Containers/InApp/tests/reducer.test.js +0 -34
- package/v2Containers/InApp/tests/sagas.test.js +9 -61
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +0 -3
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +0 -2
- package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +0 -2
- package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +0 -9
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +0 -12
- package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +0 -4
- package/v2Containers/TagList/index.js +19 -62
- package/v2Containers/Templates/ChannelTypeIllustration.js +13 -1
- package/v2Containers/Templates/_templates.scss +202 -56
- package/v2Containers/Templates/actions.js +2 -1
- package/v2Containers/Templates/constants.js +1 -0
- package/v2Containers/Templates/index.js +278 -123
- package/v2Containers/Templates/messages.js +24 -4
- package/v2Containers/Templates/reducer.js +2 -0
- package/v2Containers/Templates/tests/index.test.js +10 -0
- package/v2Containers/TemplatesV2/TemplatesV2.style.js +2 -4
- package/v2Containers/TemplatesV2/index.js +15 -7
- package/v2Containers/TemplatesV2/messages.js +4 -0
- package/v2Containers/WebPush/Create/components/BrandIconSection.js +108 -0
- package/v2Containers/WebPush/Create/components/ButtonForm.js +172 -0
- package/v2Containers/WebPush/Create/components/ButtonItem.js +101 -0
- package/v2Containers/WebPush/Create/components/ButtonList.js +145 -0
- package/v2Containers/WebPush/Create/components/ButtonsLinksSection.js +164 -0
- package/v2Containers/WebPush/Create/components/ButtonsLinksSection.test.js +463 -0
- package/v2Containers/WebPush/Create/components/FormActions.js +54 -0
- package/v2Containers/WebPush/Create/components/FormActions.test.js +163 -0
- package/v2Containers/WebPush/Create/components/MediaSection.js +142 -0
- package/v2Containers/WebPush/Create/components/MediaSection.test.js +341 -0
- package/v2Containers/WebPush/Create/components/MessageSection.js +103 -0
- package/v2Containers/WebPush/Create/components/MessageSection.test.js +268 -0
- package/v2Containers/WebPush/Create/components/NotificationTitleSection.js +87 -0
- package/v2Containers/WebPush/Create/components/NotificationTitleSection.test.js +210 -0
- package/v2Containers/WebPush/Create/components/TemplateNameSection.js +54 -0
- package/v2Containers/WebPush/Create/components/TemplateNameSection.test.js +143 -0
- package/v2Containers/WebPush/Create/components/__snapshots__/ButtonsLinksSection.test.js.snap +86 -0
- package/v2Containers/WebPush/Create/components/__snapshots__/FormActions.test.js.snap +16 -0
- package/v2Containers/WebPush/Create/components/__snapshots__/MediaSection.test.js.snap +41 -0
- package/v2Containers/WebPush/Create/components/__snapshots__/MessageSection.test.js.snap +54 -0
- package/v2Containers/WebPush/Create/components/__snapshots__/NotificationTitleSection.test.js.snap +37 -0
- package/v2Containers/WebPush/Create/components/__snapshots__/TemplateNameSection.test.js.snap +21 -0
- package/v2Containers/WebPush/Create/components/_buttons.scss +246 -0
- package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +554 -0
- package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +607 -0
- package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +633 -0
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +666 -0
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +74 -0
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +78 -0
- package/v2Containers/WebPush/Create/hooks/useButtonManagement.js +138 -0
- package/v2Containers/WebPush/Create/hooks/useButtonManagement.test.js +406 -0
- package/v2Containers/WebPush/Create/hooks/useCharacterCount.js +30 -0
- package/v2Containers/WebPush/Create/hooks/useCharacterCount.test.js +151 -0
- package/v2Containers/WebPush/Create/hooks/useImageUpload.js +104 -0
- package/v2Containers/WebPush/Create/hooks/useImageUpload.test.js +538 -0
- package/v2Containers/WebPush/Create/hooks/useTagManagement.js +122 -0
- package/v2Containers/WebPush/Create/hooks/useTagManagement.test.js +633 -0
- package/v2Containers/WebPush/Create/index.js +1148 -0
- package/v2Containers/WebPush/Create/index.scss +134 -0
- package/v2Containers/WebPush/Create/messages.js +211 -0
- package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +228 -0
- package/v2Containers/WebPush/Create/preview/NotificationContainer.js +294 -0
- package/v2Containers/WebPush/Create/preview/PreviewContent.js +90 -0
- package/v2Containers/WebPush/Create/preview/PreviewControls.js +305 -0
- package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +25 -0
- package/v2Containers/WebPush/Create/preview/WebPushPreview.js +156 -0
- package/v2Containers/WebPush/Create/preview/assets/Light.svg +53 -0
- package/v2Containers/WebPush/Create/preview/assets/Top.svg +5 -0
- package/v2Containers/WebPush/Create/preview/assets/android-arrow-down.svg +9 -0
- package/v2Containers/WebPush/Create/preview/assets/android-arrow-up.svg +9 -0
- 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 +106 -0
- package/v2Containers/WebPush/Create/preview/assets/iOS.svg +26 -0
- package/v2Containers/WebPush/Create/preview/assets/macos-arrow-down-icon.svg +9 -0
- package/v2Containers/WebPush/Create/preview/assets/macos-triple-dot-icon.svg +9 -0
- package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +18 -0
- package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +29 -0
- package/v2Containers/WebPush/Create/preview/assets/windows-close-icon.svg +9 -0
- package/v2Containers/WebPush/Create/preview/assets/windows-triple-dot-icon.svg +9 -0
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +51 -0
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +145 -0
- package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +45 -0
- package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +68 -0
- package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +61 -0
- package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +99 -0
- package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +733 -0
- package/v2Containers/WebPush/Create/preview/components/tests/WindowsChromeExpanded.test.js +571 -0
- package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +85 -0
- package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/WindowsChromeExpanded.test.js.snap +81 -0
- package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +50 -0
- package/v2Containers/WebPush/Create/preview/constants.js +637 -0
- package/v2Containers/WebPush/Create/preview/notification-container.scss +79 -0
- package/v2Containers/WebPush/Create/preview/preview.scss +358 -0
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +370 -0
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +12 -0
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +12 -0
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +12 -0
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +47 -0
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +11 -0
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +11 -0
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +11 -0
- package/v2Containers/WebPush/Create/preview/styles/_base.scss +207 -0
- package/v2Containers/WebPush/Create/preview/styles/_ios.scss +153 -0
- package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +107 -0
- package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +101 -0
- package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +229 -0
- package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +906 -0
- package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +1081 -0
- package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +723 -0
- package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +1327 -0
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +131 -0
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +112 -0
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +144 -0
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +129 -0
- package/v2Containers/WebPush/Create/utils/payloadBuilder.js +96 -0
- package/v2Containers/WebPush/Create/utils/payloadBuilder.test.js +396 -0
- package/v2Containers/WebPush/Create/utils/previewUtils.js +89 -0
- package/v2Containers/WebPush/Create/utils/urlValidation.js +115 -0
- package/v2Containers/WebPush/Create/utils/urlValidation.test.js +449 -0
- package/v2Containers/WebPush/Create/utils/validation.js +75 -0
- package/v2Containers/WebPush/Create/utils/validation.test.js +283 -0
- package/v2Containers/WebPush/actions.js +60 -0
- package/v2Containers/WebPush/constants.js +132 -0
- package/v2Containers/WebPush/index.js +2 -0
- package/v2Containers/WebPush/reducer.js +104 -0
- package/v2Containers/WebPush/sagas.js +119 -0
- package/v2Containers/WebPush/selectors.js +65 -0
- package/v2Containers/WebPush/tests/reducer.test.js +863 -0
- package/v2Containers/WebPush/tests/sagas.test.js +566 -0
- package/v2Containers/WebPush/tests/selectors.test.js +960 -0
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +0 -34
- package/v2Components/ErrorInfoNote/constants.js +0 -1
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -870
- package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +0 -6
- package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -277
- package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -295
- package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
- package/v2Components/HtmlEditor/utils/validationConstants.js +0 -38
- package/v2Components/MobilePushPreviewV2/constants.js +0 -6
- package/v2Containers/BeePopupEditor/_beePopupEditor.scss +0 -14
- package/v2Containers/BeePopupEditor/constants.js +0 -10
- package/v2Containers/BeePopupEditor/index.js +0 -194
- package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
- package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1246
- package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -2472
- package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +0 -520
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +0 -955
- package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +0 -376
- package/v2Containers/InApp/__tests__/sagas.test.js +0 -363
- package/v2Containers/InApp/tests/selectors.test.js +0 -612
- package/v2Containers/InAppWrapper/components/InAppWrapperView.js +0 -151
- package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
- package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -23
- package/v2Containers/InAppWrapper/constants.js +0 -16
- package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +0 -473
- package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +0 -198
- package/v2Containers/InAppWrapper/index.js +0 -148
- package/v2Containers/InAppWrapper/messages.js +0 -49
- package/v2Containers/InappAdvance/index.js +0 -1099
- package/v2Containers/InappAdvance/index.scss +0 -10
- package/v2Containers/InappAdvance/tests/index.test.js +0 -448
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';
|
|
49
48
|
export const CUSTOM_TAG = 'CustomTagMessage';
|
|
50
49
|
export const CUSTOMER_EXTENDED_FIELD = 'Customer extended fields';
|
|
51
50
|
export const EXTENDED_TAG = 'ExtendedTagMessage';
|
|
52
51
|
export const BADGES_UI_ENABLED = 'BADGES_UI_ENABLED';
|
|
53
52
|
export const JP_LOCALE_HIDE_FEATURE = 'JP_LOCALE_HIDE_FEATURE';
|
|
54
53
|
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,7 +15,6 @@ 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';
|
|
19
18
|
|
|
20
19
|
export const initialReducer = {
|
|
21
20
|
language: languageProviderReducer,
|
|
@@ -34,5 +33,4 @@ export const initialReducer = {
|
|
|
34
33
|
gallery: galleryReducer,
|
|
35
34
|
navigationConfig: CapCollapsibleLeftNavigationReducer,
|
|
36
35
|
previewAndTest: previewAndTestReducer,
|
|
37
|
-
inApp: inAppReducer,
|
|
38
36
|
};
|
package/package.json
CHANGED
package/services/api.js
CHANGED
|
@@ -287,6 +287,11 @@ 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
|
+
|
|
290
295
|
export const duplicateTemplate = ({id, channel}) => {
|
|
291
296
|
const url = `${API_ENDPOINT}/templates/duplicate/${id}/${channel}`;
|
|
292
297
|
return request(url, getAPICallObject('GET'));
|
|
@@ -465,11 +470,6 @@ export const getCmsTemplateSettingsV2 = (cmsType, projectId, cmsMode, langId, is
|
|
|
465
470
|
return API.get(url);
|
|
466
471
|
};
|
|
467
472
|
|
|
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,9 +725,4 @@ 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
|
-
|
|
733
728
|
export {request, getAPICallObject};
|
|
@@ -26,8 +26,6 @@ import {
|
|
|
26
26
|
updateMetaConfig,
|
|
27
27
|
getMediaDetails,
|
|
28
28
|
getAssetStatus,
|
|
29
|
-
getBeePopupBuilderToken,
|
|
30
|
-
getCmsAccounts,
|
|
31
29
|
} from '../api';
|
|
32
30
|
import { mockData } from './mockData';
|
|
33
31
|
import getSchema from '../getSchema';
|
|
@@ -975,35 +973,3 @@ describe('getAssetStatus', () => {
|
|
|
975
973
|
expect(callArgs[0]).toContain('/assets/video/asset-456/status');
|
|
976
974
|
});
|
|
977
975
|
});
|
|
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,7 +17,6 @@ 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';
|
|
21
20
|
import * as helper from './helper';
|
|
22
21
|
|
|
23
22
|
jest.mock('@capillarytech/cap-ui-utils', () => ({
|
|
@@ -148,16 +147,13 @@ describe("Creatives testing template creation", () => {
|
|
|
148
147
|
fireEvent.change(templateNameInput, {
|
|
149
148
|
target: { value: 'rcs_test_template' },
|
|
150
149
|
});
|
|
151
|
-
const
|
|
152
|
-
fireEvent.click(richCardOption);
|
|
153
|
-
const imageRadioBtn = await creativesScreen.findByRole('radio', {
|
|
154
|
-
name: /image/i,
|
|
155
|
-
});
|
|
150
|
+
const imageRadioBtn = creativesScreen.getByText(/image/i);
|
|
156
151
|
fireEvent.click(imageRadioBtn);
|
|
157
|
-
const imageUploader = await creativesScreen.findByText(
|
|
158
|
-
/drag and drop image here/i,
|
|
159
|
-
);
|
|
152
|
+
const imageUploader = await creativesScreen.findByText(/drag and drop image here/i);
|
|
160
153
|
expect(imageUploader).toBeInTheDocument();
|
|
154
|
+
const noneRadioBtn = await creativesScreen.findByText(/none/i);
|
|
155
|
+
fireEvent.click(noneRadioBtn);
|
|
156
|
+
expect(imageUploader).not.toBeInTheDocument();
|
|
161
157
|
|
|
162
158
|
// Enter the template title
|
|
163
159
|
const templateTitleInput = await creativesScreen.findByTestId(
|
|
@@ -179,7 +175,7 @@ describe("Creatives testing template creation", () => {
|
|
|
179
175
|
|
|
180
176
|
// click on Done button
|
|
181
177
|
const doneButton = creativesScreen.getByRole('button', {
|
|
182
|
-
name:
|
|
178
|
+
name: globalMessages.done.defaultMessage,
|
|
183
179
|
});
|
|
184
180
|
await userEvent.click(doneButton);
|
|
185
181
|
expect(createButton).toBeInTheDocument();
|
|
@@ -192,13 +188,11 @@ describe("Creatives testing template creation", () => {
|
|
|
192
188
|
name: /rcs/i,
|
|
193
189
|
});
|
|
194
190
|
await userEvent.click(rcs);
|
|
195
|
-
const createButton =
|
|
191
|
+
const createButton = creativesScreen.getByRole('button', {
|
|
196
192
|
name: /create new/i,
|
|
197
193
|
});
|
|
198
194
|
await waitFor(() => expect(createButton).toBeEnabled(),{ timeout: 5000, interval: 100 });
|
|
199
195
|
await userEvent.click(createButton);
|
|
200
|
-
const richCardOption = await creativesScreen.findByText(/rich card/i);
|
|
201
|
-
fireEvent.click(richCardOption);
|
|
202
196
|
const templateNameInput = await creativesScreen.findByTestId(
|
|
203
197
|
/template_name/,
|
|
204
198
|
{},
|
|
@@ -223,14 +217,38 @@ describe("Creatives testing template creation", () => {
|
|
|
223
217
|
fireEvent.change(templateTextInput, {
|
|
224
218
|
target: { value: 'rcs_template_text' },
|
|
225
219
|
});
|
|
226
|
-
const
|
|
227
|
-
|
|
220
|
+
const ctaCheckBox = creativesScreen.getByText(/call to action/i);
|
|
221
|
+
fireEvent.click(ctaCheckBox);
|
|
222
|
+
const doneButton = creativesScreen.getByRole('button', {
|
|
223
|
+
name: globalMessages.done.defaultMessage,
|
|
228
224
|
});
|
|
229
|
-
|
|
230
|
-
|
|
225
|
+
//done button will be disabled cta button is not configured
|
|
226
|
+
expect(doneButton).toBeDisabled();
|
|
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
|
|
231
234
|
fireEvent.change(ctaBtnText, {
|
|
232
235
|
target: { value: 'cta_button' },
|
|
233
236
|
});
|
|
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);
|
|
234
252
|
expect(createButton).toBeInTheDocument();
|
|
235
253
|
});
|
|
236
254
|
|
|
@@ -1558,25 +1558,6 @@ 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
|
-
|
|
1580
1561
|
export const mpushAccount = {
|
|
1581
1562
|
success: true,
|
|
1582
1563
|
status: {
|
|
@@ -1735,18 +1716,7 @@ export const emailTemplates = {
|
|
|
1735
1716
|
|
|
1736
1717
|
export const domainProperties = {
|
|
1737
1718
|
entity:{
|
|
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
|
-
],
|
|
1719
|
+
WHATSAPP:[]
|
|
1750
1720
|
},
|
|
1751
1721
|
warnings:[]
|
|
1752
1722
|
};
|
|
@@ -36,8 +36,6 @@ 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));
|
|
41
39
|
case 'WHATSAPP':
|
|
42
40
|
return res(ctx.status(200), ctx.json(apiResponse.whatsappAccount));
|
|
43
41
|
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,
|
|
24
25
|
LIQUID_SUPPORT,
|
|
25
|
-
SUPPORT_CK_EDITOR,
|
|
26
26
|
ENABLE_NEW_MPUSH
|
|
27
27
|
} from '../constants/unified';
|
|
28
28
|
import { apiMessageFormatHandler } from './commonUtils';
|
|
@@ -96,10 +96,6 @@ 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
|
-
);
|
|
103
99
|
|
|
104
100
|
export const hasGiftVoucherFeature = Auth.hasFeatureAccess.bind(
|
|
105
101
|
null,
|
|
@@ -121,6 +117,11 @@ export const hasWechatFeatureEnabled = Auth.hasFeatureAccess.bind(
|
|
|
121
117
|
ENABLE_WECHAT,
|
|
122
118
|
);
|
|
123
119
|
|
|
120
|
+
export const hasWebPushFeatureEnabled = Auth.hasFeatureAccess.bind(
|
|
121
|
+
null,
|
|
122
|
+
ENABLE_WEBPUSH,
|
|
123
|
+
);
|
|
124
|
+
|
|
124
125
|
export const hasCustomerBarcodeFeatureEnabled = Auth.hasFeatureAccess.bind(
|
|
125
126
|
null,
|
|
126
127
|
ENABLE_CUSTOMER_BARCODE_TAG,
|
package/utils/commonUtils.js
CHANGED
|
@@ -173,30 +173,20 @@ 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
|
|
179
176
|
if (!validString) {
|
|
180
177
|
standardErrors = [emptyBodyError];
|
|
181
178
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
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) => {
|
|
179
|
+
let liquidErrors;
|
|
180
|
+
if (result && Array.isArray(result?.errors)) {
|
|
181
|
+
liquidErrors = result?.errors?.map((error) => {
|
|
189
182
|
const message = typeof error?.message === "string"
|
|
190
183
|
? error.message
|
|
191
184
|
: somethingWrongMsg;
|
|
192
185
|
return message;
|
|
193
186
|
});
|
|
194
|
-
} else
|
|
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
|
|
187
|
+
} else {
|
|
197
188
|
liquidErrors = [somethingWrongMsg];
|
|
198
189
|
}
|
|
199
|
-
|
|
200
190
|
onError({
|
|
201
191
|
standardErrors,
|
|
202
192
|
liquidErrors,
|
|
@@ -408,20 +398,7 @@ export const validateMobilePushContent = async (formData, options) => {
|
|
|
408
398
|
// Helper function to extract content for a platform
|
|
409
399
|
export const extractContent = (platformData) => {
|
|
410
400
|
if (!platformData) return '';
|
|
411
|
-
const { title, message, ctas
|
|
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
|
|
401
|
+
const { title, message, ctas } = platformData;
|
|
425
402
|
return [
|
|
426
403
|
title,
|
|
427
404
|
message,
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for uploading images from URLs
|
|
3
|
+
*
|
|
4
|
+
* NOTE: CORS-limited; will be replaced with backend implementation.
|
|
5
|
+
* Flow currently hidden (not removed) from frontend.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
DEFAULT_ALLOWED_CONTENT_TYPES,
|
|
10
|
+
MIME_TYPE_TO_EXTENSION,
|
|
11
|
+
DEFAULT_IMAGE_EXTENSION,
|
|
12
|
+
} from '../v2Components/CapImageUrlUpload/constants';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Fetches an image from a URL
|
|
16
|
+
*
|
|
17
|
+
* @param {string} url - The image URL to fetch
|
|
18
|
+
* @returns {Promise<Response>} - The fetch response object
|
|
19
|
+
* @throws {Error} - If the fetch fails (network/CORS error)
|
|
20
|
+
*/
|
|
21
|
+
export const fetchImageFromUrl = async (url) => {
|
|
22
|
+
const trimmedUrl = url?.trim() || '';
|
|
23
|
+
|
|
24
|
+
if (!trimmedUrl) {
|
|
25
|
+
throw new Error('URL is required');
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// CORS-limited: fails for images without proper CORS headers
|
|
29
|
+
const response = await fetch(trimmedUrl, {
|
|
30
|
+
method: 'GET',
|
|
31
|
+
redirect: 'follow',
|
|
32
|
+
mode: 'cors',
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
if (!response.ok) {
|
|
36
|
+
throw new Error(`Failed to fetch image: ${response.status} ${response.statusText}`);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return response;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Helper function to upload image from URL
|
|
44
|
+
* Fetches image, validates content type and size, converts to File, and uploads via uploadAsset
|
|
45
|
+
*
|
|
46
|
+
* @param {string} url - The image URL to upload
|
|
47
|
+
* @param {Function} formatMessage - React Intl formatMessage function
|
|
48
|
+
* @param {Object} messages - React Intl messages object
|
|
49
|
+
* @param {Function} uploadAssetFn - Function to upload the asset (file, type, fileParams)
|
|
50
|
+
* @param {string} fileNamePrefix - Prefix for the generated file name
|
|
51
|
+
* @param {number} maxSize - Maximum file size in bytes
|
|
52
|
+
* @param {string[]} allowedContentTypes - Array of allowed MIME types (defaults to DEFAULT_ALLOWED_CONTENT_TYPES)
|
|
53
|
+
* @returns {Promise<{success: boolean, error: string}>} - Result object with success status and error message
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* const result = await uploadImageFromUrlHelper(
|
|
57
|
+
* 'https://example.com/image.jpg',
|
|
58
|
+
* formatMessage,
|
|
59
|
+
* messages,
|
|
60
|
+
* uploadAsset,
|
|
61
|
+
* 'my-image',
|
|
62
|
+
* 5000000,
|
|
63
|
+
* ['image/jpeg', 'image/png']
|
|
64
|
+
* );
|
|
65
|
+
*/
|
|
66
|
+
export const uploadImageFromUrlHelper = async (
|
|
67
|
+
url,
|
|
68
|
+
formatMessage,
|
|
69
|
+
messages,
|
|
70
|
+
uploadAssetFn,
|
|
71
|
+
fileNamePrefix,
|
|
72
|
+
maxSize,
|
|
73
|
+
allowedContentTypes = DEFAULT_ALLOWED_CONTENT_TYPES,
|
|
74
|
+
) => {
|
|
75
|
+
const trimmedUrl = url?.trim() || '';
|
|
76
|
+
|
|
77
|
+
try {
|
|
78
|
+
const response = await fetchImageFromUrl(trimmedUrl);
|
|
79
|
+
|
|
80
|
+
// Validate Content-Type
|
|
81
|
+
const contentType = response.headers?.get('Content-Type') || '';
|
|
82
|
+
const normalizedContentType = contentType.split(';')[0].toLowerCase().trim();
|
|
83
|
+
|
|
84
|
+
if (!allowedContentTypes.includes(normalizedContentType)) {
|
|
85
|
+
return {
|
|
86
|
+
success: false,
|
|
87
|
+
error: formatMessage(messages.imageTypeInvalid),
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const blob = await response.blob();
|
|
92
|
+
|
|
93
|
+
if (blob.size > maxSize) {
|
|
94
|
+
return {
|
|
95
|
+
success: false,
|
|
96
|
+
error: formatMessage(messages.imageSizeInvalid),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Load image to get dimensions and verify validity
|
|
101
|
+
return new Promise((resolve) => {
|
|
102
|
+
const img = new Image();
|
|
103
|
+
const objectUrl = URL.createObjectURL(blob);
|
|
104
|
+
|
|
105
|
+
img.onload = () => {
|
|
106
|
+
const extension = MIME_TYPE_TO_EXTENSION[normalizedContentType] || DEFAULT_IMAGE_EXTENSION;
|
|
107
|
+
const fileName = `${fileNamePrefix}.${extension}`;
|
|
108
|
+
const file = new File([blob], fileName, { type: blob.type });
|
|
109
|
+
const fileParams = {
|
|
110
|
+
width: img.width,
|
|
111
|
+
height: img.height,
|
|
112
|
+
error: false,
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
uploadAssetFn(file, 'image', fileParams);
|
|
116
|
+
URL.revokeObjectURL(objectUrl);
|
|
117
|
+
|
|
118
|
+
resolve({
|
|
119
|
+
success: true,
|
|
120
|
+
error: '',
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
img.onerror = () => {
|
|
125
|
+
URL.revokeObjectURL(objectUrl);
|
|
126
|
+
resolve({
|
|
127
|
+
success: false,
|
|
128
|
+
error: formatMessage(messages.imageLoadError),
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
img.src = objectUrl;
|
|
133
|
+
});
|
|
134
|
+
} catch (error) {
|
|
135
|
+
return {
|
|
136
|
+
success: false,
|
|
137
|
+
error: formatMessage(messages.imageLoadError),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
|