@capillarytech/creatives-library 8.0.242-alpha.1 → 8.0.242-alpha.11
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/config/app.js +1 -1
- 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 -18
- package/translations/en.json +4 -3
- package/utils/common.js +6 -5
- package/utils/commonUtils.js +1 -14
- package/utils/imageUrlUpload.js +141 -0
- package/utils/tests/commonUtil.test.js +0 -224
- package/utils/transformTemplateConfig.js +10 -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 -412
- package/v2Components/ErrorInfoNote/messages.js +0 -22
- package/v2Components/ErrorInfoNote/style.scss +2 -279
- package/v2Components/HtmlEditor/HTMLEditor.js +89 -210
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1132
- package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +12 -17
- package/v2Components/HtmlEditor/_htmlEditor.scss +23 -8
- package/v2Components/HtmlEditor/_index.lazy.scss +1 -1
- package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +101 -13
- package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +139 -148
- package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
- package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
- package/v2Components/HtmlEditor/components/EditorToolbar/index.js +1 -1
- package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -1
- 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 +6 -3
- package/v2Components/HtmlEditor/components/PreviewPane/index.js +11 -10
- package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +62 -87
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -49
- package/v2Components/HtmlEditor/constants.js +20 -29
- package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
- package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
- package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
- package/v2Components/HtmlEditor/index.js +1 -1
- package/v2Components/HtmlEditor/messages.js +85 -95
- package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +101 -99
- package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
- package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -34
- package/v2Components/MobilePushPreviewV2/index.js +7 -32
- package/v2Components/TemplatePreview/_templatePreview.scss +24 -44
- package/v2Components/TemplatePreview/index.js +32 -47
- package/v2Components/TemplatePreview/messages.js +0 -4
- package/v2Components/TestAndPreviewSlidebox/index.js +25 -31
- package/v2Containers/App/constants.js +5 -0
- package/v2Containers/BeeEditor/index.js +80 -82
- package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +4 -3
- package/v2Containers/CreativesContainer/SlideBoxContent.js +118 -148
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +3 -9
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -2
- package/v2Containers/CreativesContainer/constants.js +2 -1
- package/v2Containers/CreativesContainer/index.js +41 -173
- package/v2Containers/CreativesContainer/messages.js +4 -4
- package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +210 -0
- package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +354 -38
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -36
- package/v2Containers/Email/actions.js +0 -7
- package/v2Containers/Email/constants.js +1 -5
- package/v2Containers/Email/index.js +0 -13
- package/v2Containers/Email/messages.js +0 -32
- package/v2Containers/Email/reducer.js +1 -12
- package/v2Containers/Email/sagas.js +6 -41
- package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
- package/v2Containers/EmailWrapper/components/EmailWrapperView.js +7 -193
- 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 +67 -436
- package/v2Containers/EmailWrapper/index.js +23 -99
- package/v2Containers/EmailWrapper/messages.js +1 -61
- package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +1 -26
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +77 -111
- package/v2Containers/InApp/actions.js +0 -7
- package/v2Containers/InApp/constants.js +4 -20
- package/v2Containers/InApp/index.js +357 -800
- 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 +12 -12
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +8 -8
- package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +100 -77
- package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +72 -63
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +184 -150
- package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +16 -12
- package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +32 -28
- package/v2Containers/TagList/index.js +1 -67
- 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 -128
- 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/index.js +8 -1
- 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 +1056 -0
- package/v2Containers/WebPush/Create/index.scss +134 -0
- package/v2Containers/WebPush/Create/messages.js +203 -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 +23 -0
- package/v2Containers/WebPush/Create/preview/WebPushPreview.js +150 -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 +47 -0
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +141 -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 +81 -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 +351 -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 +909 -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 +943 -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 +94 -0
- package/v2Containers/WebPush/Create/utils/payloadBuilder.test.js +390 -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 +128 -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 +843 -0
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +528 -431
- package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -254
- package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -362
- package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
- package/v2Containers/BeePopupEditor/constants.js +0 -10
- package/v2Containers/BeePopupEditor/index.js +0 -193
- package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
- package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1045
- 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 -162
- package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
- package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -9
- 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
|
@@ -31,9 +31,8 @@ function SlideBoxFooter(props) {
|
|
|
31
31
|
showTestAndPreviewButton,
|
|
32
32
|
shouldShowDoneFooter,
|
|
33
33
|
shouldShowContinueFooter,
|
|
34
|
-
isContinueButtonDisabled,
|
|
35
|
-
continueButtonLabel,
|
|
36
34
|
} = props;
|
|
35
|
+
|
|
37
36
|
return (
|
|
38
37
|
<div className='template-footer-width'>
|
|
39
38
|
{isLiquidValidationError && (<ErrorInfoNote errorMessages={errorMessages} currentTab={currentTab?.toUpperCase()} />)}
|
|
@@ -71,11 +70,8 @@ function SlideBoxFooter(props) {
|
|
|
71
70
|
</div>
|
|
72
71
|
)}
|
|
73
72
|
{shouldShowContinueFooter() && (
|
|
74
|
-
<CapButton
|
|
75
|
-
|
|
76
|
-
disabled={isContinueButtonDisabled || false}
|
|
77
|
-
>
|
|
78
|
-
<FormattedMessage {...(continueButtonLabel || messages.continue)} />
|
|
73
|
+
<CapButton onClick={onCreateNextStep}>
|
|
74
|
+
<FormattedMessage {...messages.continue} />
|
|
79
75
|
</CapButton>
|
|
80
76
|
)}
|
|
81
77
|
{slidBoxContent === PREVIEW && (
|
|
@@ -103,7 +99,5 @@ SlideBoxFooter.propTypes = {
|
|
|
103
99
|
onTestAndPreview: PropTypes.func,
|
|
104
100
|
isEmptyContent: PropTypes.bool,
|
|
105
101
|
showTestAndPreviewButton: PropTypes.bool,
|
|
106
|
-
isContinueButtonDisabled: PropTypes.bool,
|
|
107
|
-
continueButtonLabel: PropTypes.object,
|
|
108
102
|
};
|
|
109
103
|
export default SlideBoxFooter;
|
|
@@ -45,7 +45,6 @@ export function SlideBoxHeader(props) {
|
|
|
45
45
|
const isZaloEdit = channel.toLowerCase() === ZALO && slidBoxContent === 'editTemplate';
|
|
46
46
|
const zaloOverview = isZaloEdit && isFullMode;
|
|
47
47
|
const whatsappOverview = isWhatsappEdit && isFullMode;
|
|
48
|
-
const shouldShowInAppEditHeader = isInAppEdit && !isFullMode;
|
|
49
48
|
const headerMessage = whatsappOverview ? messages.whatsappOverview : zaloOverview ? messages.zaloOverview : messages.editMessageContent;
|
|
50
49
|
const {
|
|
51
50
|
whatsappTemplateName,
|
|
@@ -72,6 +71,7 @@ export function SlideBoxHeader(props) {
|
|
|
72
71
|
rcs: <FormattedMessage {...messages.rcsCreative} />,
|
|
73
72
|
zalo: <FormattedMessage {...messages.zaloTemplate} />,
|
|
74
73
|
viber: <FormattedMessage {...messages.viberTemplate} />,
|
|
74
|
+
webpush: <FormattedMessage {...messages.webPushTemplate} />,
|
|
75
75
|
};
|
|
76
76
|
return labels[currentChannel.toLowerCase()];
|
|
77
77
|
};
|
|
@@ -110,7 +110,7 @@ export function SlideBoxHeader(props) {
|
|
|
110
110
|
}
|
|
111
111
|
/>
|
|
112
112
|
)}
|
|
113
|
-
{!showTemplateNameHeader && slidBoxContent === 'editTemplate' && (
|
|
113
|
+
{!showTemplateNameHeader && slidBoxContent === 'editTemplate' && (
|
|
114
114
|
<CapHeader
|
|
115
115
|
className="support-video-elements"
|
|
116
116
|
title={<FormattedMessage {...headerMessage} values={{ channel: getChannelLabel(channel) }} />}
|
|
@@ -21,10 +21,11 @@ export const PUSH = "PUSH";
|
|
|
21
21
|
export const RCS = "RCS";
|
|
22
22
|
export const ZALO = "ZALO";
|
|
23
23
|
export const INAPP = "INAPP";
|
|
24
|
+
export const WEBPUSH = "WEBPUSH";
|
|
25
|
+
export const WEBPUSH_BRAND_ICON = "WEBPUSH_BRAND_ICON";
|
|
24
26
|
export const PREVIEW = "preview";
|
|
25
27
|
export const EDIT_TEMPLATE = "editTemplate";
|
|
26
28
|
export const JOURNEY = "journey";
|
|
27
|
-
export const HTML = "HTML";
|
|
28
29
|
|
|
29
30
|
export const LOYALTY_SUPPORTED_ACTION = "SEND_COMMUNICATION_ACTION";
|
|
30
31
|
|
|
@@ -43,7 +43,7 @@ import {
|
|
|
43
43
|
IMAGE as LINE_IMAGE, IMAGE_MAP, IMAGE_CAROUSEL, VIDEO as LINE_VIDEO, TEMPLATE, STICKER,
|
|
44
44
|
} from '../Line/Container/constants';
|
|
45
45
|
import { IMAGE, VIDEO } from '../Facebook/Advertisement/constant';
|
|
46
|
-
import {
|
|
46
|
+
import {RCS_STATUSES} from '../Rcs/constants';
|
|
47
47
|
import { CREATIVE } from '../Facebook/constants';
|
|
48
48
|
import { LOYALTY } from '../App/constants';
|
|
49
49
|
import {
|
|
@@ -64,7 +64,6 @@ import {
|
|
|
64
64
|
// getTemplateDiffState
|
|
65
65
|
} from "../../utils/transformerUtils";
|
|
66
66
|
import { MANUAL_CAROUSEL } from '../MobilePushNew/constants';
|
|
67
|
-
import { BIG_HTML } from '../InApp/constants';
|
|
68
67
|
|
|
69
68
|
const classPrefix = 'add-creatives-section';
|
|
70
69
|
const CREATIVES_CONTAINER = 'creativesContainer';
|
|
@@ -96,7 +95,6 @@ export class Creatives extends React.Component {
|
|
|
96
95
|
currentChannel: this.props.channel || 'sms',
|
|
97
96
|
weChatTemplateType: '',
|
|
98
97
|
weChatMaptemplateStep: 0,
|
|
99
|
-
inAppEditorType: null,
|
|
100
98
|
isLiquidValidationError: false,
|
|
101
99
|
errorMessages: [],
|
|
102
100
|
liquidErrorMessage: {
|
|
@@ -109,8 +107,6 @@ export class Creatives extends React.Component {
|
|
|
109
107
|
isTestAndPreviewMode: false, // Add flag to track Test & Preview mode
|
|
110
108
|
// Performance optimization: Local template name for immediate UI feedback
|
|
111
109
|
localTemplateName: '',
|
|
112
|
-
// Track selected email create mode for new flow (HTML Editor vs Drag & Drop)
|
|
113
|
-
selectedEmailCreateMode: null,
|
|
114
110
|
};
|
|
115
111
|
this.liquidFlow = Boolean(commonUtil.hasLiquidSupportFeature());
|
|
116
112
|
this.creativesTemplateSteps = {
|
|
@@ -140,7 +136,7 @@ export class Creatives extends React.Component {
|
|
|
140
136
|
if (!this.props?.isFullMode) {
|
|
141
137
|
this.props?.templateActions.getCdnTransformationConfig();
|
|
142
138
|
}
|
|
143
|
-
|
|
139
|
+
|
|
144
140
|
// Store loyalty tag props if loyaltyTagFetchingDependencies is provided
|
|
145
141
|
const { loyaltyTagFetchingDependencies } = this.props;
|
|
146
142
|
if (loyaltyTagFetchingDependencies) {
|
|
@@ -166,9 +162,9 @@ export class Creatives extends React.Component {
|
|
|
166
162
|
const isEmptyTemplateName = !value.trim();
|
|
167
163
|
|
|
168
164
|
// 1. IMMEDIATE: Update local state for instant UI feedback
|
|
169
|
-
this.setState({
|
|
165
|
+
this.setState({
|
|
170
166
|
isTemplateNameEmpty: isEmptyTemplateName,
|
|
171
|
-
localTemplateName: value
|
|
167
|
+
localTemplateName: value
|
|
172
168
|
});
|
|
173
169
|
|
|
174
170
|
// 2. DEBOUNCED: Only debounce the expensive onFormDataChange call
|
|
@@ -247,19 +243,8 @@ export class Creatives extends React.Component {
|
|
|
247
243
|
onCreateNextStep = () => {
|
|
248
244
|
this.setState((prevState) => {
|
|
249
245
|
let templateStep = prevState.templateStep + 1;
|
|
250
|
-
const { emailCreateMode, currentChannel
|
|
251
|
-
|
|
252
|
-
// Check if we should skip template selection for HTML Editor
|
|
253
|
-
const supportCKEditor = commonUtil.hasSupportCKEditor();
|
|
254
|
-
const shouldSkipTemplateSelection = !supportCKEditor
|
|
255
|
-
&& selectedEmailCreateMode === 'html_editor'
|
|
256
|
-
&& currentChannel.toUpperCase() === constants.EMAIL
|
|
257
|
-
&& prevState.templateStep === 1; // Only skip if we're at modeSelection step
|
|
258
|
-
|
|
259
|
-
if (shouldSkipTemplateSelection) {
|
|
260
|
-
// Skip template selection (step 2), go directly to createTemplateContent (step 3)
|
|
261
|
-
templateStep = prevState.templateStep + 2;
|
|
262
|
-
} else if ((currentChannel.toUpperCase() === constants.EMAIL && emailCreateMode === "upload") || [constants.MOBILE_PUSH, constants.WECHAT, constants.INAPP].includes(currentChannel.toUpperCase())) {
|
|
246
|
+
const { emailCreateMode, currentChannel } = prevState;
|
|
247
|
+
if ((currentChannel.toUpperCase() === constants.EMAIL && emailCreateMode === "upload") || [constants.MOBILE_PUSH, constants.WECHAT, constants.INAPP].includes(currentChannel.toUpperCase())) {
|
|
263
248
|
templateStep = prevState.templateStep + 2;
|
|
264
249
|
}
|
|
265
250
|
return {
|
|
@@ -268,21 +253,14 @@ export class Creatives extends React.Component {
|
|
|
268
253
|
});
|
|
269
254
|
}
|
|
270
255
|
|
|
271
|
-
onEmailModeChange = (mode
|
|
272
|
-
this.setState({
|
|
273
|
-
emailCreateMode: mode,
|
|
274
|
-
selectedEmailCreateMode: selectedMode || mode, // Store the selected mode for new flow
|
|
275
|
-
});
|
|
256
|
+
onEmailModeChange = (mode) => {
|
|
257
|
+
this.setState({ emailCreateMode: mode });
|
|
276
258
|
}
|
|
277
259
|
|
|
278
260
|
onInAppModeChange = (mode) => {
|
|
279
261
|
this.setState({ inAppCreateMode: mode });
|
|
280
262
|
}
|
|
281
263
|
|
|
282
|
-
onInAppEditorTypeChange = (editorType) => {
|
|
283
|
-
this.setState({ inAppEditorType: editorType });
|
|
284
|
-
}
|
|
285
|
-
|
|
286
264
|
onMobilepushModeChange = (mode) => {
|
|
287
265
|
this.setState({ mobilePushCreateMode: mode });
|
|
288
266
|
}
|
|
@@ -326,7 +304,7 @@ export class Creatives extends React.Component {
|
|
|
326
304
|
}
|
|
327
305
|
return buttonObj;
|
|
328
306
|
});
|
|
329
|
-
const {
|
|
307
|
+
const {url, previewUrl} = media || {};
|
|
330
308
|
return {
|
|
331
309
|
bodyText: bodyTemplate,
|
|
332
310
|
varMap: cardVarMapped,
|
|
@@ -455,35 +433,14 @@ export class Creatives extends React.Component {
|
|
|
455
433
|
}
|
|
456
434
|
case constants.INAPP: {
|
|
457
435
|
const mode = get(templateData, 'androidContent.type') || get(templateData, 'iosContent.type') || '';
|
|
458
|
-
|
|
459
|
-
// Check if this is a BEE editor template (identified by special title 'bee free template')
|
|
460
|
-
const isAndroidBeeEditor = templateData?.androidContent?.type === constants.HTML
|
|
461
|
-
&& templateData?.androidContent?.title?.toLowerCase() === 'bee free template';
|
|
462
|
-
const isIosBeeEditor = templateData?.iosContent?.type === constants.HTML
|
|
463
|
-
&& templateData?.iosContent?.title?.toLowerCase() === 'bee free template';
|
|
464
|
-
|
|
465
436
|
creativesTemplateData = {
|
|
466
437
|
type: channel,
|
|
467
438
|
name: templateData.messageSubject,
|
|
468
439
|
versions: {
|
|
469
440
|
base: {
|
|
470
441
|
content: {
|
|
471
|
-
ANDROID:
|
|
472
|
-
|
|
473
|
-
bodyType: templateData?.androidContent?.bodyType,
|
|
474
|
-
deviceType: constants.ANDROID,
|
|
475
|
-
beeHtml: { value: templateData?.androidContent?.message },
|
|
476
|
-
beeJson: templateData?.androidContent?.expandableDetails?.message,
|
|
477
|
-
isBEEeditor: true,
|
|
478
|
-
} : templateData?.androidContent,
|
|
479
|
-
IOS: isIosBeeEditor ? {
|
|
480
|
-
type: templateData?.iosContent?.type,
|
|
481
|
-
bodyType: templateData?.iosContent?.bodyType,
|
|
482
|
-
deviceType: constants.IOS,
|
|
483
|
-
beeHtml: { value: templateData?.iosContent?.message },
|
|
484
|
-
beeJson: templateData?.iosContent?.expandableDetails?.message,
|
|
485
|
-
isBEEeditor: true,
|
|
486
|
-
} : templateData?.iosContent,
|
|
442
|
+
ANDROID: templateData?.androidContent,
|
|
443
|
+
IOS: templateData?.iosContent,
|
|
487
444
|
},
|
|
488
445
|
},
|
|
489
446
|
},
|
|
@@ -718,7 +675,7 @@ export class Creatives extends React.Component {
|
|
|
718
675
|
} = templateData || {};
|
|
719
676
|
const cardContent = (rcsContent.cardContent && rcsContent.cardContent[0]) || {};
|
|
720
677
|
const Status = RCS_STATUSES.approved || '';
|
|
721
|
-
|
|
678
|
+
|
|
722
679
|
creativesTemplateData = {
|
|
723
680
|
type: channel,
|
|
724
681
|
edit: true,
|
|
@@ -803,7 +760,7 @@ export class Creatives extends React.Component {
|
|
|
803
760
|
});
|
|
804
761
|
|
|
805
762
|
getMobilePushCarouselData = (expandableDetails = []) => {
|
|
806
|
-
const newExpandableDetails = {
|
|
763
|
+
const newExpandableDetails = {...expandableDetails};
|
|
807
764
|
newExpandableDetails.style = expandableDetails.style || MANUAL_CAROUSEL;
|
|
808
765
|
newExpandableDetails.message = expandableDetails.message || '';
|
|
809
766
|
newExpandableDetails.ctas = expandableDetails.ctas || [];
|
|
@@ -898,24 +855,11 @@ export class Creatives extends React.Component {
|
|
|
898
855
|
androidContent.custom = custom;
|
|
899
856
|
}
|
|
900
857
|
if (channel === constants.MOBILE_PUSH && androidContent?.expandableDetails?.carouselData?.length) {
|
|
901
|
-
androidContent.expandableDetails = this.getMobilePushCarouselData({
|
|
902
|
-
}
|
|
903
|
-
if (androidContent?.isBEEeditor && androidContent?.beeHtml?.value) {
|
|
904
|
-
templateData.androidContent = {};
|
|
905
|
-
templateData.androidContent.type = constants.HTML;
|
|
906
|
-
templateData.androidContent.message = androidContent?.beeHtml?.value || '';
|
|
907
|
-
templateData.androidContent.title = 'bee free template';
|
|
908
|
-
templateData.androidContent.bodyType = androidContent?.bodyType;
|
|
909
|
-
templateData.androidContent.deviceType = constants.ANDROID;
|
|
910
|
-
templateData.androidContent.expandableDetails = {
|
|
911
|
-
style: BIG_HTML,
|
|
912
|
-
message: androidContent?.beeJson || '',
|
|
913
|
-
};
|
|
914
|
-
} else if (!androidContent?.isBEEeditor) {
|
|
915
|
-
templateData.androidContent = androidContent;
|
|
916
|
-
templateData.androidContent.type = androidContent?.type || get(channelTemplate, 'definition.mode', '')?.toUpperCase() || constants.TEXT;
|
|
917
|
-
templateData.androidContent.deviceType = constants.ANDROID;
|
|
858
|
+
androidContent.expandableDetails = this.getMobilePushCarouselData({...androidContent?.expandableDetails});
|
|
918
859
|
}
|
|
860
|
+
templateData.androidContent = androidContent;
|
|
861
|
+
templateData.androidContent.type = androidContent?.type || get(channelTemplate, 'definition.mode', '')?.toUpperCase() || constants.TEXT;
|
|
862
|
+
templateData.androidContent.deviceType = constants.ANDROID;
|
|
919
863
|
}
|
|
920
864
|
const iosContent = channel === constants.INAPP ? get(channelTemplate, 'versions.base.content.IOS') : get(channelTemplate, 'versions.base.IOS');
|
|
921
865
|
if (!isEmpty(iosContent)) {
|
|
@@ -933,24 +877,11 @@ export class Creatives extends React.Component {
|
|
|
933
877
|
iosContent.custom = custom;
|
|
934
878
|
}
|
|
935
879
|
if (channel === constants.MOBILE_PUSH && iosContent?.expandableDetails?.carouselData?.length) {
|
|
936
|
-
iosContent.expandableDetails = this.getMobilePushCarouselData({
|
|
937
|
-
}
|
|
938
|
-
if (iosContent?.isBEEeditor && iosContent?.beeHtml?.value) {
|
|
939
|
-
templateData.iosContent = {};
|
|
940
|
-
templateData.iosContent.type = constants.HTML;
|
|
941
|
-
templateData.iosContent.message = iosContent?.beeHtml?.value || '';
|
|
942
|
-
templateData.iosContent.title = 'bee free template';
|
|
943
|
-
templateData.iosContent.bodyType = iosContent?.bodyType;
|
|
944
|
-
templateData.iosContent.deviceType = constants.IOS;
|
|
945
|
-
templateData.iosContent.expandableDetails = {
|
|
946
|
-
style: BIG_HTML,
|
|
947
|
-
message: iosContent?.beeJson || '',
|
|
948
|
-
};
|
|
949
|
-
} else if (!iosContent?.isBEEeditor) {
|
|
950
|
-
templateData.iosContent = iosContent;
|
|
951
|
-
templateData.iosContent.type = iosContent?.type || get(channelTemplate, 'definition.mode', '')?.toUpperCase() || 'TEXT';
|
|
952
|
-
templateData.iosContent.deviceType = constants.IOS;
|
|
880
|
+
iosContent.expandableDetails = this.getMobilePushCarouselData({...iosContent?.expandableDetails});
|
|
953
881
|
}
|
|
882
|
+
templateData.iosContent = iosContent;
|
|
883
|
+
templateData.iosContent.type = iosContent?.type || get(channelTemplate, 'definition.mode', '')?.toUpperCase() || 'TEXT';
|
|
884
|
+
templateData.iosContent.deviceType = constants.IOS;
|
|
954
885
|
}
|
|
955
886
|
templateData.messageSubject = channelTemplate?.name ? channelTemplate?.name : "messageSubject";
|
|
956
887
|
}
|
|
@@ -1165,7 +1096,7 @@ export class Creatives extends React.Component {
|
|
|
1165
1096
|
contentType = "",
|
|
1166
1097
|
cardType = "",
|
|
1167
1098
|
cardSettings = {},
|
|
1168
|
-
} = get(versions, 'base.content.RCS.rcsContent',
|
|
1099
|
+
} = get(versions, 'base.content.RCS.rcsContent',{});
|
|
1169
1100
|
const rcsContent = {
|
|
1170
1101
|
contentType,
|
|
1171
1102
|
cardType,
|
|
@@ -1303,7 +1234,7 @@ export class Creatives extends React.Component {
|
|
|
1303
1234
|
processCentralCommsMetaId = (channel, creativesData) => {
|
|
1304
1235
|
// Create the payload for the centralcommnsmetaId API call
|
|
1305
1236
|
const { isLoyaltyModule = false, loyaltyMetaData = {} } = this.props;
|
|
1306
|
-
const { actionName, setMetaData = () => {
|
|
1237
|
+
const { actionName, setMetaData = () => {} } = loyaltyMetaData;
|
|
1307
1238
|
|
|
1308
1239
|
// const isTemplateModified = getTemplateDiffState(
|
|
1309
1240
|
// channel,
|
|
@@ -1353,9 +1284,6 @@ export class Creatives extends React.Component {
|
|
|
1353
1284
|
if (prevState.currentChannel.toUpperCase() === constants.EMAIL) {
|
|
1354
1285
|
newState = { ...newState, emailCreateMode: null };
|
|
1355
1286
|
}
|
|
1356
|
-
if (prevState.currentChannel.toUpperCase() === constants.INAPP) {
|
|
1357
|
-
newState = { ...newState, inAppEditorType: null };
|
|
1358
|
-
}
|
|
1359
1287
|
return newState;
|
|
1360
1288
|
});
|
|
1361
1289
|
}
|
|
@@ -1401,7 +1329,7 @@ export class Creatives extends React.Component {
|
|
|
1401
1329
|
shouldShowFooter = () => {
|
|
1402
1330
|
const { isFullMode } = this.props;
|
|
1403
1331
|
const {
|
|
1404
|
-
slidBoxContent, currentChannel, emailCreateMode, templateNameExists, templateStep, mobilePushCreateMode, weChatTemplateType, templateData,
|
|
1332
|
+
slidBoxContent, currentChannel, emailCreateMode, templateNameExists, templateStep, mobilePushCreateMode, weChatTemplateType, templateData,
|
|
1405
1333
|
} = this.state;
|
|
1406
1334
|
const channel = currentChannel.toUpperCase();
|
|
1407
1335
|
const currentStep = this.creativesTemplateSteps[templateStep];
|
|
@@ -1409,13 +1337,6 @@ export class Creatives extends React.Component {
|
|
|
1409
1337
|
showFooter = isFullMode && slidBoxContent === "preview";
|
|
1410
1338
|
const isMobilepush = channel === constants.MOBILE_PUSH;
|
|
1411
1339
|
|
|
1412
|
-
const supportCKEditor = commonUtil.hasSupportCKEditor();
|
|
1413
|
-
if (!supportCKEditor && channel === constants.EMAIL && currentStep === 'modeSelection' && slidBoxContent === 'createTemplate') {
|
|
1414
|
-
return true;
|
|
1415
|
-
}
|
|
1416
|
-
if (!supportCKEditor && channel === constants.EMAIL && currentStep === 'createTemplateContent' && slidBoxContent === 'createTemplate') {
|
|
1417
|
-
showFooter = true;
|
|
1418
|
-
}
|
|
1419
1340
|
|
|
1420
1341
|
if (!isFullMode) {
|
|
1421
1342
|
const isEmailCreate = slidBoxContent === 'createTemplate' && channel === constants.EMAIL && currentStep !== 'createTemplateContent';
|
|
@@ -1451,7 +1372,6 @@ export class Creatives extends React.Component {
|
|
|
1451
1372
|
showFooter = true;
|
|
1452
1373
|
}
|
|
1453
1374
|
|
|
1454
|
-
|
|
1455
1375
|
if (showFooter) {
|
|
1456
1376
|
if (slidBoxContent === "createTemplate" && ((channel === constants.EMAIL && currentStep === 'createTemplateContent')
|
|
1457
1377
|
|| ([constants.SMS, constants.WECHAT].includes(channel) && currentStep === 'modeSelection'))) {
|
|
@@ -1474,7 +1394,7 @@ export class Creatives extends React.Component {
|
|
|
1474
1394
|
|
|
1475
1395
|
shouldShowDoneFooter = () => {
|
|
1476
1396
|
const {
|
|
1477
|
-
slidBoxContent, templateStep, currentChannel, templateData,
|
|
1397
|
+
slidBoxContent, templateStep, currentChannel, templateData,
|
|
1478
1398
|
} = this.state;
|
|
1479
1399
|
const { isFullMode } = this.props;
|
|
1480
1400
|
const currentStep = this.creativesTemplateSteps[templateStep];
|
|
@@ -1482,17 +1402,10 @@ export class Creatives extends React.Component {
|
|
|
1482
1402
|
const channelName = !isFullMode && templateData ? templateData.type : currentChannel;
|
|
1483
1403
|
const channel = channelName?.toUpperCase();
|
|
1484
1404
|
|
|
1485
|
-
|
|
1486
|
-
const supportCKEditor = commonUtil.hasSupportCKEditor();
|
|
1405
|
+
|
|
1487
1406
|
if (channel === constants.EMAIL || channel === constants.SMS) {
|
|
1488
1407
|
const isEmailCreate = slidBoxContent === 'createTemplate' && channel === constants.EMAIL && currentStep !== 'createTemplateContent';
|
|
1489
|
-
|
|
1490
|
-
// For new HTML editor flow (when supportCKEditor is false), show Done footer when in createTemplateContent step
|
|
1491
|
-
if (!supportCKEditor && channel === constants.EMAIL && slidBoxContent === 'createTemplate' && currentStep === 'createTemplateContent') {
|
|
1492
|
-
showDone = true;
|
|
1493
|
-
} else {
|
|
1494
|
-
showDone = (slidBoxContent === 'editTemplate' || slidBoxContent === 'createTemplate') && !isEmailCreate;
|
|
1495
|
-
}
|
|
1408
|
+
showDone = (slidBoxContent === 'editTemplate' || slidBoxContent === 'createTemplate') && !isEmailCreate;
|
|
1496
1409
|
} else if ([constants.WECHAT, constants.MOBILE_PUSH].includes(channel)) {
|
|
1497
1410
|
showDone = currentStep === "createTemplateContent" || slidBoxContent === "editTemplate";
|
|
1498
1411
|
|
|
@@ -1502,6 +1415,7 @@ export class Creatives extends React.Component {
|
|
|
1502
1415
|
}
|
|
1503
1416
|
}
|
|
1504
1417
|
|
|
1418
|
+
|
|
1505
1419
|
return showDone;
|
|
1506
1420
|
}
|
|
1507
1421
|
|
|
@@ -1521,18 +1435,18 @@ export class Creatives extends React.Component {
|
|
|
1521
1435
|
templateNameComponentInput = ({ formData, onFormDataChange, name }) => {
|
|
1522
1436
|
// Use local state for immediate UI feedback, fallback to prop value
|
|
1523
1437
|
const displayValue = this.state.localTemplateName !== '' ? this.state.localTemplateName : name;
|
|
1524
|
-
|
|
1438
|
+
|
|
1525
1439
|
return (
|
|
1526
1440
|
<CapInput
|
|
1527
1441
|
value={displayValue}
|
|
1528
1442
|
suffix={<span />}
|
|
1529
|
-
onBlur={() => {
|
|
1530
|
-
this.setState({
|
|
1443
|
+
onBlur={() => {
|
|
1444
|
+
this.setState({
|
|
1531
1445
|
isEditName: false,
|
|
1532
1446
|
localTemplateName: '' // Clear local state on blur
|
|
1533
|
-
}, () => {
|
|
1534
|
-
this.showTemplateName({ formData, onFormDataChange });
|
|
1535
|
-
});
|
|
1447
|
+
}, () => {
|
|
1448
|
+
this.showTemplateName({ formData, onFormDataChange });
|
|
1449
|
+
});
|
|
1536
1450
|
}}
|
|
1537
1451
|
onChange={(ev) => {
|
|
1538
1452
|
const { value } = ev.currentTarget;
|
|
@@ -1544,16 +1458,10 @@ export class Creatives extends React.Component {
|
|
|
1544
1458
|
}
|
|
1545
1459
|
|
|
1546
1460
|
showTemplateName = ({ formData, onFormDataChange }) => { //gets called from email/index after template data is fetched
|
|
1547
|
-
const { slidBoxContent, currentChannel, isEditName
|
|
1461
|
+
const { slidBoxContent, currentChannel, isEditName } = this.state;
|
|
1548
1462
|
const channel = currentChannel.toUpperCase();
|
|
1549
1463
|
if ([constants.EMAIL, constants.MOBILE_PUSH, constants.INAPP].includes(channel) && (slidBoxContent === 'editTemplate' || slidBoxContent === 'createTemplate')) {
|
|
1550
1464
|
const name = get(formData, 'template-name');
|
|
1551
|
-
|
|
1552
|
-
const isModeSelectionStep = templateStep === 'modeSelection' || this.creativesTemplateSteps[templateStep] === 'modeSelection';
|
|
1553
|
-
const isCreateMode = slidBoxContent === 'createTemplate';
|
|
1554
|
-
if (isCreateMode && isModeSelectionStep) {
|
|
1555
|
-
return;
|
|
1556
|
-
}
|
|
1557
1465
|
if (channel === constants.EMAIL && !name && slidBoxContent === 'createTemplate') {
|
|
1558
1466
|
this.setState({ isTemplateNameEmpty: true });
|
|
1559
1467
|
}
|
|
@@ -1561,7 +1469,7 @@ export class Creatives extends React.Component {
|
|
|
1561
1469
|
if (name && !isEditName) {
|
|
1562
1470
|
this.setState({ showTemplateNameComponentEdit: false });
|
|
1563
1471
|
} else if (isEditName) {
|
|
1564
|
-
this.setState({
|
|
1472
|
+
this.setState({
|
|
1565
1473
|
showTemplateNameComponentEdit: true,
|
|
1566
1474
|
localTemplateName: name || '' // Initialize local state with current value
|
|
1567
1475
|
});
|
|
@@ -1579,22 +1487,13 @@ export class Creatives extends React.Component {
|
|
|
1579
1487
|
|
|
1580
1488
|
shouldShowContinueFooter = () => { // only for email for now, has to be modified according to channel
|
|
1581
1489
|
const {
|
|
1582
|
-
slidBoxContent, templateStep, currentChannel, emailCreateMode, mobilePushCreateMode,
|
|
1490
|
+
slidBoxContent, templateStep, currentChannel, emailCreateMode, mobilePushCreateMode, inAppCreateMode, weChatTemplateType,
|
|
1583
1491
|
} = this.state;
|
|
1584
1492
|
let isShowContinueFooter = false;
|
|
1585
1493
|
const currentStep = this.creativesTemplateSteps[templateStep];
|
|
1586
1494
|
const channel = currentChannel.toUpperCase();
|
|
1587
|
-
// Check if supportCKEditor is false (new flow)
|
|
1588
|
-
const supportCKEditor = commonUtil.hasSupportCKEditor(); // Default to legacy flow
|
|
1589
1495
|
if (channel === constants.EMAIL || channel === constants.SMS) {
|
|
1590
|
-
|
|
1591
|
-
// Always show it (even if disabled) - visibility is separate from enabled state
|
|
1592
|
-
if (!supportCKEditor && currentStep === 'modeSelection' && slidBoxContent === 'createTemplate') {
|
|
1593
|
-
return true; // Return early to ensure visibility
|
|
1594
|
-
}
|
|
1595
|
-
|
|
1596
|
-
// Legacy flow: Original logic (only when supportCKEditor is true)
|
|
1597
|
-
if (supportCKEditor && ((emailCreateMode === "upload" && !isEmpty(this.props.EmailLayout)) || emailCreateMode === "editor")) {
|
|
1496
|
+
if ((emailCreateMode === "upload" && !isEmpty(this.props.EmailLayout)) || emailCreateMode === "editor") {
|
|
1598
1497
|
let isEmailCreate = slidBoxContent === 'createTemplate';
|
|
1599
1498
|
isEmailCreate = currentChannel.toUpperCase() === constants.EMAIL && ((emailCreateMode === "upload" && currentStep !== 'createTemplateContent') || (emailCreateMode === "editor" && currentStep !== 'createTemplateContent' && currentStep !== "templateSelection"));
|
|
1600
1499
|
isShowContinueFooter = isEmailCreate && emailCreateMode;
|
|
@@ -1603,6 +1502,8 @@ export class Creatives extends React.Component {
|
|
|
1603
1502
|
isShowContinueFooter = !isEmpty(mobilePushCreateMode) && currentStep === "modeSelection";
|
|
1604
1503
|
} else if (currentChannel.toUpperCase() === constants.WECHAT) {
|
|
1605
1504
|
isShowContinueFooter = !isEmpty(weChatTemplateType) && currentStep === "modeSelection";
|
|
1505
|
+
} else if (currentChannel.toUpperCase() === constants.INAPP) {
|
|
1506
|
+
isShowContinueFooter = !isEmpty(inAppCreateMode) && currentChannel === "modeSelection";
|
|
1606
1507
|
}
|
|
1607
1508
|
|
|
1608
1509
|
return isShowContinueFooter;
|
|
@@ -1628,28 +1529,6 @@ export class Creatives extends React.Component {
|
|
|
1628
1529
|
return true;
|
|
1629
1530
|
}
|
|
1630
1531
|
|
|
1631
|
-
// Check if Continue button should be disabled (for new flow only)
|
|
1632
|
-
isContinueButtonDisabled = () => {
|
|
1633
|
-
const { currentChannel, emailCreateMode, templateNameExists } = this.state;
|
|
1634
|
-
const { isFullMode } = this.props;
|
|
1635
|
-
const supportCKEditor = commonUtil.hasSupportCKEditor();
|
|
1636
|
-
if (supportCKEditor) {
|
|
1637
|
-
return false;
|
|
1638
|
-
}
|
|
1639
|
-
if (currentChannel.toUpperCase() === constants.EMAIL) {
|
|
1640
|
-
const isEditorSelected = !!emailCreateMode && emailCreateMode !== 'upload';
|
|
1641
|
-
// In full mode: require both template name AND editor selection
|
|
1642
|
-
// In library mode: require only editor selection (template name not needed)
|
|
1643
|
-
if (isFullMode) {
|
|
1644
|
-
const isTemplateNameValid = templateNameExists;
|
|
1645
|
-
return !(isTemplateNameValid && isEditorSelected);
|
|
1646
|
-
}
|
|
1647
|
-
// Library mode: only editor selection is required
|
|
1648
|
-
return !isEditorSelected;
|
|
1649
|
-
}
|
|
1650
|
-
return true;
|
|
1651
|
-
}
|
|
1652
|
-
|
|
1653
1532
|
render() {
|
|
1654
1533
|
const {
|
|
1655
1534
|
slidBoxContent,
|
|
@@ -1670,7 +1549,6 @@ export class Creatives extends React.Component {
|
|
|
1670
1549
|
activeFormBuilderTab,
|
|
1671
1550
|
showTestAndPreviewSlidebox,
|
|
1672
1551
|
isTestAndPreviewMode,
|
|
1673
|
-
inAppEditorType,
|
|
1674
1552
|
} = this.state;
|
|
1675
1553
|
const {
|
|
1676
1554
|
isFullMode,
|
|
@@ -1693,10 +1571,6 @@ export class Creatives extends React.Component {
|
|
|
1693
1571
|
isLoyaltyModule,
|
|
1694
1572
|
loyaltyMetaData = {},
|
|
1695
1573
|
} = this.props;
|
|
1696
|
-
// Compute Continue button label
|
|
1697
|
-
const supportCKEditor = commonUtil.hasSupportCKEditor();
|
|
1698
|
-
const continueButtonLabel = supportCKEditor ? messages.continue : messages.next;
|
|
1699
|
-
|
|
1700
1574
|
const mapTemplateCreate = slidBoxContent === "createTemplate"
|
|
1701
1575
|
&& weChatTemplateType === MAP_TEMPLATE
|
|
1702
1576
|
&& templateStep !== "modeSelection";
|
|
@@ -1758,8 +1632,6 @@ export class Creatives extends React.Component {
|
|
|
1758
1632
|
onChannelChange={this.onChannelChange}
|
|
1759
1633
|
onEmailModeChange={this.onEmailModeChange}//used when create is clicked in email
|
|
1760
1634
|
emailCreateMode={emailCreateMode}// upload zip || use editor are values
|
|
1761
|
-
onInAppEditorTypeChange={this.onInAppEditorTypeChange}//used when create is clicked in inapp
|
|
1762
|
-
inAppEditorType={inAppEditorType}// htmlEditor || dragDropEditor are values
|
|
1763
1635
|
templateStep={this.creativesTemplateSteps[templateStep]}
|
|
1764
1636
|
onCreateNextStep={this.onCreateNextStep}
|
|
1765
1637
|
onEnterTemplateName={this.onEnterTemplateName}
|
|
@@ -1769,8 +1641,6 @@ export class Creatives extends React.Component {
|
|
|
1769
1641
|
cap={cap}
|
|
1770
1642
|
setIsLoadingContent={this.setIsLoadingContent}
|
|
1771
1643
|
onMobilepushModeChange={this.onMobilepushModeChange}
|
|
1772
|
-
inAppCreateMode={this.state.inAppCreateMode}
|
|
1773
|
-
onInAppModeChange={this.onInAppModeChange}
|
|
1774
1644
|
mobilePushCreateMode={mobilePushCreateMode}
|
|
1775
1645
|
showTemplateName={this.showTemplateName}
|
|
1776
1646
|
onValidationFail={this.onValidationFail}
|
|
@@ -1831,8 +1701,6 @@ export class Creatives extends React.Component {
|
|
|
1831
1701
|
errorMessages={liquidErrorMessage}
|
|
1832
1702
|
currentTab={activeFormBuilderTab}
|
|
1833
1703
|
onTestAndPreview={this.handleTestAndPreview}
|
|
1834
|
-
isContinueButtonDisabled={this.isContinueButtonDisabled()}
|
|
1835
|
-
continueButtonLabel={continueButtonLabel}
|
|
1836
1704
|
showTestAndPreviewButton={(() => {
|
|
1837
1705
|
const showButton = currentChannel.toUpperCase() === constants.EMAIL && (slidBoxContent === 'editTemplate' || slidBoxContent === 'createTemplate');
|
|
1838
1706
|
return showButton;
|
|
@@ -1843,7 +1711,7 @@ export class Creatives extends React.Component {
|
|
|
1843
1711
|
{(() => {
|
|
1844
1712
|
const errorsToShow = get(liquidErrorMessage, constants.LIQUID_ERROR_MSG, []);
|
|
1845
1713
|
const standardErrorsToShow = get(liquidErrorMessage, constants.STANDARD_ERROR_MSG, []);
|
|
1846
|
-
return <ErrorInfoNote currentTab={activeFormBuilderTab?.toUpperCase()} errorMessages={{
|
|
1714
|
+
return <ErrorInfoNote currentTab={activeFormBuilderTab?.toUpperCase()} errorMessages={{LIQUID_ERROR_MSG: errorsToShow, STANDARD_ERROR_MSG: standardErrorsToShow}} />;
|
|
1847
1715
|
})()}
|
|
1848
1716
|
</CapRow>
|
|
1849
1717
|
)}
|
|
@@ -338,6 +338,10 @@ export default defineMessages({
|
|
|
338
338
|
id: `${scope}.rcsCreative`,
|
|
339
339
|
defaultMessage: `RCS creative`,
|
|
340
340
|
},
|
|
341
|
+
"webPushTemplate": {
|
|
342
|
+
id: `${scope}.webPushTemplate`,
|
|
343
|
+
defaultMessage: `Web Push Template`,
|
|
344
|
+
},
|
|
341
345
|
"templateNameEmpty": {
|
|
342
346
|
id: `${scope}.templateNameEmpty`,
|
|
343
347
|
defaultMessage: `Template name cannot be empty`
|
|
@@ -366,8 +370,4 @@ export default defineMessages({
|
|
|
366
370
|
id: `${scope}.testAndPreview`,
|
|
367
371
|
defaultMessage: `Preview and Test`,
|
|
368
372
|
},
|
|
369
|
-
"next": {
|
|
370
|
-
id: `${scope}.next`,
|
|
371
|
-
defaultMessage: `Next`,
|
|
372
|
-
},
|
|
373
373
|
});
|