@capillarytech/creatives-library 8.0.259 → 8.0.260-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 +1 -2
- package/initialReducer.js +0 -2
- package/package.json +1 -1
- package/services/api.js +0 -10
- package/services/tests/api.test.js +0 -34
- package/translations/en.json +3 -4
- package/utils/common.js +0 -12
- package/utils/commonUtils.js +5 -28
- package/utils/tests/commonUtil.test.js +0 -224
- package/utils/transformTemplateConfig.js +10 -0
- package/v2Components/CapDeviceContent/index.js +56 -61
- 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 -457
- package/v2Components/ErrorInfoNote/messages.js +6 -36
- package/v2Components/ErrorInfoNote/style.scss +6 -282
- package/v2Components/FormBuilder/index.js +4 -4
- package/v2Components/FormBuilder/tests/index.test.js +4 -13
- package/v2Components/HtmlEditor/HTMLEditor.js +94 -547
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1441
- 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 +0 -9
- package/v2Components/HtmlEditor/components/EditorToolbar/index.js +4 -4
- 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 +6 -3
- 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 -1
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -49
- package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +34 -50
- package/v2Components/HtmlEditor/components/ValidationPanel/index.js +41 -70
- package/v2Components/HtmlEditor/constants.js +20 -42
- package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
- package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +16 -120
- package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
- package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
- package/v2Components/HtmlEditor/hooks/useValidation.js +53 -189
- package/v2Components/HtmlEditor/index.js +1 -1
- package/v2Components/HtmlEditor/messages.js +94 -92
- package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +45 -94
- 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 +102 -134
- package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
- package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -66
- package/v2Components/MobilePushPreviewV2/index.js +7 -32
- 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/BeeEditor/index.js +90 -172
- package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +3 -4
- package/v2Containers/CreativesContainer/SlideBoxContent.js +52 -128
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +13 -163
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -2
- package/v2Containers/CreativesContainer/constants.js +0 -1
- package/v2Containers/CreativesContainer/index.js +46 -240
- package/v2Containers/CreativesContainer/messages.js +0 -8
- package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +2 -11
- package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +50 -38
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -106
- package/v2Containers/Email/actions.js +0 -7
- package/v2Containers/Email/constants.js +1 -5
- package/v2Containers/Email/index.js +30 -239
- 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 -211
- 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 +77 -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 +77 -594
- package/v2Containers/InApp/actions.js +0 -7
- package/v2Containers/InApp/constants.js +4 -20
- package/v2Containers/InApp/index.js +360 -804
- 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 +71 -152
- 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 -39
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +6 -10
- package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +75 -102
- package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +54 -81
- package/v2Containers/MobilePushNew/index.js +2 -3
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +178 -262
- package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +12 -16
- package/v2Containers/SmsTrai/Edit/index.js +1 -2
- package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +111 -468
- package/v2Containers/TagList/index.js +19 -62
- package/v2Containers/Templates/_templates.scss +1 -60
- package/v2Containers/Templates/index.js +4 -89
- package/v2Containers/Templates/messages.js +0 -4
- package/v2Containers/WebPush/Create/messages.js +8 -0
- package/v2Containers/WebPush/Create/preview/PreviewControls.js +2 -2
- package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +3 -1
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +5 -1
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +5 -1
- package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +5 -1
- package/v2Containers/WebPush/Create/preview/preview.scss +7 -0
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +734 -1306
- package/v2Components/ErrorInfoNote/constants.js +0 -1
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -874
- package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +0 -6
- package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -255
- package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -364
- package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
- package/v2Components/HtmlEditor/utils/validationConstants.js +0 -40
- 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 -1285
- package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -1880
- package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +0 -520
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +0 -643
- 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
|
@@ -3,14 +3,16 @@
|
|
|
3
3
|
* Beeeditor
|
|
4
4
|
*
|
|
5
5
|
*/
|
|
6
|
-
import React, {
|
|
7
|
-
useEffect, useState, useRef, useCallback,
|
|
8
|
-
} from 'react';
|
|
6
|
+
import React, { useEffect, useState, useRef, useCallback } from 'react';
|
|
9
7
|
import PropTypes from 'prop-types';
|
|
10
8
|
import { injectIntl, intlShape, FormattedMessage } from 'react-intl';
|
|
11
9
|
import { connect } from 'react-redux';
|
|
12
|
-
import
|
|
10
|
+
import TagList from '../TagList';
|
|
11
|
+
import { bindActionCreators } from 'redux';
|
|
13
12
|
import { createStructuredSelector } from 'reselect';
|
|
13
|
+
import makeSelectBEE from './selectors';
|
|
14
|
+
import { UserIsAuthenticated } from '../../utils/authWrapper';
|
|
15
|
+
import config from '../../config/app';
|
|
14
16
|
import { loadItem } from 'services/localStorageApi';
|
|
15
17
|
import './index.scss';
|
|
16
18
|
import CapModal from "@capillarytech/cap-ui-library/CapModal";
|
|
@@ -19,18 +21,18 @@ import CapInput from "@capillarytech/cap-ui-library/CapInput";
|
|
|
19
21
|
import CapSelect from "@capillarytech/cap-ui-library/CapSelect";
|
|
20
22
|
import CapSpin from "@capillarytech/cap-ui-library/CapSpin";
|
|
21
23
|
import CapNotification from "@capillarytech/cap-ui-library/CapNotification";
|
|
22
|
-
import
|
|
23
|
-
import
|
|
24
|
+
import CapAskAira from '@capillarytech/cap-ui-library/CapAskAira';
|
|
25
|
+
import { request,getAPICallObject } from '../../services/api';
|
|
24
26
|
import messages from './messages';
|
|
25
27
|
import * as beeActions from './actions';
|
|
28
|
+
import injectSaga from '../../utils/injectSaga';
|
|
26
29
|
import injectReducer from '../../utils/injectReducer';
|
|
27
30
|
import { v2BeeEditionSagas } from './sagas';
|
|
28
31
|
import v2BeeEditionReducer from './reducer';
|
|
29
|
-
|
|
30
|
-
import TagList from '../TagList';
|
|
31
|
-
import injectSaga from '../../utils/injectSaga';
|
|
32
|
+
import { compose } from 'redux';
|
|
32
33
|
|
|
33
34
|
import { selectCurrentOrgDetails } from '../Cap/selectors';
|
|
35
|
+
import { ENABLE_AI_SUGGESTIONS } from './constants';
|
|
34
36
|
function BeeEditor(props) {
|
|
35
37
|
const {
|
|
36
38
|
uid,
|
|
@@ -59,10 +61,10 @@ function BeeEditor(props) {
|
|
|
59
61
|
const UNSUBSCRIBE = 'unsubscribe';
|
|
60
62
|
let beePluginInstance = null;
|
|
61
63
|
const categoryOptions = [{key: 'cta', value: 'cta', label: formatMessage(messages.cta)},
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
{key: 'footer', value: 'footer', label: formatMessage(messages.footer)},
|
|
65
|
+
{key: 'header', value: 'header', label: formatMessage(messages.header)},
|
|
66
|
+
{key: 'sp', value: 'sp', label: formatMessage(messages.socialPlatform)},
|
|
67
|
+
{key: 'others', value: 'others', label: formatMessage(messages.others)},
|
|
66
68
|
];
|
|
67
69
|
const [visibleTaglist, setVisibleTaglist] = useState(false);
|
|
68
70
|
const [showRowMetaModal, setRowMetaModal] = useState(false);
|
|
@@ -70,10 +72,6 @@ function BeeEditor(props) {
|
|
|
70
72
|
const [rowMetaInfo, setRowMetaInfo] = useState({});
|
|
71
73
|
const [rowName, setRowName] = useState('');
|
|
72
74
|
const [rowCategory, setRowCategory] = useState('');
|
|
73
|
-
const beePluginInstanceRef = useRef(null);
|
|
74
|
-
const initializedBeeJsonRef = useRef(null); // Track which beeJson we've initialized for
|
|
75
|
-
const isInitializingRef = useRef(false); // Track if initialization is in progress
|
|
76
|
-
const tokenDataRef = useRef(tokenData); // Store latest tokenData in ref
|
|
77
75
|
let API_ENDPOINT = config.development.api_endpoint;
|
|
78
76
|
if (process.env.NODE_ENV === 'production') {
|
|
79
77
|
API_ENDPOINT = `${window.location.origin}${config.production.api_endpoint}`;
|
|
@@ -96,8 +94,8 @@ function BeeEditor(props) {
|
|
|
96
94
|
locale = JSON.parse(user).lang;
|
|
97
95
|
}
|
|
98
96
|
const defaultFormattedUrl = locale !== DEFAULT_LOCALE && ['zh-cn', 'zh', 'jp', 'ja-JP'].includes(locale)
|
|
99
|
-
|
|
100
|
-
|
|
97
|
+
? `${API_ENDPOINT}/common/getBEECustomLangunage?langid=${MAPPED_LOCALE[locale]}`
|
|
98
|
+
: "";
|
|
101
99
|
useEffect(() => {
|
|
102
100
|
savedCallback.current = Object.keys(selectedTag).length > 0 ? selectedTag : rowMetaInfo;
|
|
103
101
|
}, [selectedTag, rowMetaInfo]);
|
|
@@ -106,44 +104,7 @@ function BeeEditor(props) {
|
|
|
106
104
|
const externalContentURLs = categoryOptions.map((obj) => ({name: obj.label, value: `${API_ENDPOINT}/common/getCustomRows?category=${obj.value}&orgid=${loadItem('orgID')}`}));
|
|
107
105
|
return externalContentURLs;
|
|
108
106
|
};
|
|
109
|
-
// Keep tokenDataRef updated with latest tokenData
|
|
110
|
-
useEffect(() => {
|
|
111
|
-
tokenDataRef.current = tokenData;
|
|
112
|
-
}, [tokenData]);
|
|
113
|
-
|
|
114
107
|
useEffect(() => {
|
|
115
|
-
// Only initialize if we have both tokenData and beeJson
|
|
116
|
-
const currentTokenData = tokenDataRef.current;
|
|
117
|
-
if (!currentTokenData || !beeJson) {
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
// Normalize beeJson for comparison (handle both string and object)
|
|
122
|
-
// Use a stable key that includes uid to uniquely identify this instance
|
|
123
|
-
let normalizedBeeJson;
|
|
124
|
-
try {
|
|
125
|
-
normalizedBeeJson = typeof beeJson === 'string' ? beeJson : JSON.stringify(beeJson);
|
|
126
|
-
} catch (e) {
|
|
127
|
-
console.warn('[BeeEditor] Error stringifying beeJson:', e);
|
|
128
|
-
normalizedBeeJson = String(beeJson);
|
|
129
|
-
}
|
|
130
|
-
const initializationKey = `${uid}-${normalizedBeeJson}`;
|
|
131
|
-
|
|
132
|
-
// Only initialize if:
|
|
133
|
-
// 1. We haven't initialized yet, OR
|
|
134
|
-
// 2. The beeJson has changed (different template)
|
|
135
|
-
// This prevents re-initialization when only tokenData changes
|
|
136
|
-
// Also check if initialization is already in progress to prevent concurrent calls
|
|
137
|
-
if (
|
|
138
|
-
(initializedBeeJsonRef.current === initializationKey && beePluginInstanceRef.current) ||
|
|
139
|
-
isInitializingRef.current
|
|
140
|
-
) {
|
|
141
|
-
return; // Already initialized for this beeJson or initialization in progress, skip
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// Mark that we're starting initialization
|
|
145
|
-
isInitializingRef.current = true;
|
|
146
|
-
|
|
147
108
|
const beeConfig = {
|
|
148
109
|
uid,
|
|
149
110
|
container: 'bee-plugin-container',
|
|
@@ -226,53 +187,14 @@ function BeeEditor(props) {
|
|
|
226
187
|
actions.createCustomRow(JSON.parse(rowJSON), callbackSaveRow);
|
|
227
188
|
},
|
|
228
189
|
};
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
beePluginInstanceRef.current = null;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
try {
|
|
241
|
-
window.BeePlugin.create(currentTokenData, beeConfig, (instance) => {
|
|
242
|
-
beePluginInstance = instance;
|
|
243
|
-
beePluginInstanceRef.current = instance;
|
|
244
|
-
const parseJson = typeof beeJson === 'string' ? JSON.parse(beeJson) : beeJson;
|
|
245
|
-
beePluginInstance.start(parseJson);
|
|
246
|
-
saveBeeInstance(beePluginInstance);
|
|
247
|
-
// Mark this beeJson as initialized and clear initialization flag
|
|
248
|
-
initializedBeeJsonRef.current = initializationKey;
|
|
249
|
-
isInitializingRef.current = false;
|
|
250
|
-
});
|
|
251
|
-
} catch (error) {
|
|
252
|
-
// Reset flag on error
|
|
253
|
-
console.error('[BeeEditor] Error creating BEE plugin:', error);
|
|
254
|
-
isInitializingRef.current = false;
|
|
255
|
-
}
|
|
256
|
-
return () => {
|
|
257
|
-
clearInterval(intervalTimer);
|
|
258
|
-
// Reset initialization flag on cleanup
|
|
259
|
-
isInitializingRef.current = false;
|
|
260
|
-
// Clean up BEE plugin instance if it exists
|
|
261
|
-
if (beePluginInstanceRef.current) {
|
|
262
|
-
try {
|
|
263
|
-
beePluginInstanceRef.current.destroy();
|
|
264
|
-
} catch (e) {
|
|
265
|
-
console.warn('[BeeEditor] useEffect cleanup - Error destroying BEE plugin:', e);
|
|
266
|
-
}
|
|
267
|
-
beePluginInstanceRef.current = null;
|
|
268
|
-
}
|
|
269
|
-
// Note: We don't reset initializedBeeJsonRef here because:
|
|
270
|
-
// 1. If beeJson changes, the effect will run again and the check will allow re-initialization
|
|
271
|
-
// 2. If component unmounts, the ref will be garbage collected anyway
|
|
272
|
-
};
|
|
273
|
-
// Only depend on beeJson, uid, and id - not tokenData
|
|
274
|
-
// tokenData is accessed via ref to prevent re-initialization when it changes
|
|
275
|
-
}, [beeJson, uid, id]);
|
|
190
|
+
window.BeePlugin.create(tokenData, beeConfig, (instance) => {
|
|
191
|
+
beePluginInstance = instance;
|
|
192
|
+
const parseJson = JSON.parse(beeJson);
|
|
193
|
+
beePluginInstance.start(parseJson);
|
|
194
|
+
saveBeeInstance(beePluginInstance);
|
|
195
|
+
});
|
|
196
|
+
return () => clearInterval(intervalTimer);
|
|
197
|
+
}, []);
|
|
276
198
|
const callbackSaveRow = (status, errorMsg) => {
|
|
277
199
|
if (status === 'success') {
|
|
278
200
|
CapNotification.success({message: formatMessage(messages.rowCreationSuccessMgs), key: 'create-custom-row-success'});
|
|
@@ -324,80 +246,76 @@ function BeeEditor(props) {
|
|
|
324
246
|
const onChangeCategoy = (e) => {
|
|
325
247
|
setRowCategory(e);
|
|
326
248
|
};
|
|
327
|
-
const contentSection =
|
|
328
|
-
|
|
329
|
-
<
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
/>
|
|
249
|
+
const contentSection = <>
|
|
250
|
+
<CapInput
|
|
251
|
+
label={<FormattedMessage {...messages.rowName} />}
|
|
252
|
+
placeholder={formatMessage(messages.rowPlaceHolder)}
|
|
253
|
+
onChange={onRowChange}
|
|
254
|
+
value={rowName}
|
|
255
|
+
maxLength={50}
|
|
256
|
+
style={{ width: 324, paddingBottom: 21 }}
|
|
257
|
+
/>
|
|
258
|
+
<CapSelect
|
|
259
|
+
label="Category"
|
|
260
|
+
style={{ width: 324, paddingBottom: 24}}
|
|
261
|
+
options={categoryOptions}
|
|
262
|
+
value={rowCategory || undefined}
|
|
263
|
+
placeholder={<FormattedMessage {...messages.selectCategoyPlaceholder} />}
|
|
264
|
+
onChange={onChangeCategoy}
|
|
265
|
+
/>
|
|
345
266
|
|
|
346
|
-
|
|
347
|
-
);
|
|
267
|
+
</>;
|
|
348
268
|
return (
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
</CapModal>
|
|
394
|
-
</CapSpin>
|
|
269
|
+
<CapSpin spinning={saveRowRequest || false}>
|
|
270
|
+
<div id="bee-plugin-container" style={{ height: "650px" }}></div>
|
|
271
|
+
<TagList
|
|
272
|
+
moduleFilterEnabled={moduleFilterEnabled}
|
|
273
|
+
label={label}
|
|
274
|
+
onTagSelect={onTagSelect}
|
|
275
|
+
location={location}
|
|
276
|
+
tags={filteredTags}
|
|
277
|
+
injectedTags={injectedTags}
|
|
278
|
+
className={className}
|
|
279
|
+
id={id}
|
|
280
|
+
userLocale={userLocale}
|
|
281
|
+
selectedOfferDetails={selectedOfferDetails}
|
|
282
|
+
visibleTaglist={visibleTaglist}
|
|
283
|
+
hidePopover
|
|
284
|
+
modalProps={{
|
|
285
|
+
onCancel: onCancelTagList,
|
|
286
|
+
style: { left: 135, top: 250 },
|
|
287
|
+
className: "bee-editor-tag-list",
|
|
288
|
+
}}
|
|
289
|
+
onContextChange={onContextChange}
|
|
290
|
+
eventContextTags={eventContextTags}
|
|
291
|
+
/>
|
|
292
|
+
<CapModal
|
|
293
|
+
className="custom-row-modal"
|
|
294
|
+
visible={showRowMetaModal}
|
|
295
|
+
onCancel={onCustomRowCancel}
|
|
296
|
+
title={formatMessage(messages.customRows)}
|
|
297
|
+
style={{ width: 372, height: 296, left: 135, top: 300 }}
|
|
298
|
+
footer={[
|
|
299
|
+
<CapButton
|
|
300
|
+
key="submit"
|
|
301
|
+
type="primary"
|
|
302
|
+
id="delete-version"
|
|
303
|
+
onClick={onCustomRowSave}
|
|
304
|
+
disabled={isDisableSave()}
|
|
305
|
+
>
|
|
306
|
+
{formatMessage(messages.done)}
|
|
307
|
+
</CapButton>,
|
|
308
|
+
]}
|
|
309
|
+
>
|
|
310
|
+
{contentSection}
|
|
311
|
+
</CapModal>
|
|
312
|
+
</CapSpin>
|
|
395
313
|
);
|
|
396
314
|
}
|
|
397
315
|
|
|
398
316
|
BeeEditor.propTypes = {
|
|
399
|
-
beeJson: PropTypes.
|
|
400
|
-
tokenData: PropTypes.
|
|
317
|
+
beeJson: PropTypes.object.isRequired,
|
|
318
|
+
tokenData: PropTypes.object.isRequired,
|
|
401
319
|
uid: PropTypes.string.isRequired,
|
|
402
320
|
intl: intlShape.isRequired,
|
|
403
321
|
actions: PropTypes.object.isRequired,
|
|
@@ -418,7 +336,7 @@ BeeEditor.propTypes = {
|
|
|
418
336
|
|
|
419
337
|
const mapStateToProps = () => createStructuredSelector({
|
|
420
338
|
BEESelect: makeSelectBEE(),
|
|
421
|
-
currentOrgDetails: selectCurrentOrgDetails()
|
|
339
|
+
currentOrgDetails: selectCurrentOrgDetails()
|
|
422
340
|
});
|
|
423
341
|
|
|
424
342
|
function mapDispatchToProps(dispatch) {
|
|
@@ -243,7 +243,7 @@ exports[`<Cap /> should render correct component 1`] = `
|
|
|
243
243
|
"creatives.componentsV2.CapDocumentUpload.imageDimenstionDescription": "Dimensions upto: {width}px x {height}px",
|
|
244
244
|
"creatives.componentsV2.CapDocumentUpload.or": "OR",
|
|
245
245
|
"creatives.componentsV2.CapDocumentUpload.uploadComputer": "Select from computer",
|
|
246
|
-
"creatives.componentsV2.CapDocumentUpload.whatsappDocSize": "Size
|
|
246
|
+
"creatives.componentsV2.CapDocumentUpload.whatsappDocSize": "Size upto: {size}",
|
|
247
247
|
"creatives.componentsV2.CapImageUpload.aspectRatio": "Aspect ratio: 1:1",
|
|
248
248
|
"creatives.componentsV2.CapImageUpload.dragAndDrop": "Drag and drop image here",
|
|
249
249
|
"creatives.componentsV2.CapImageUpload.format": "Format: JPEG, JPG, PNG",
|
|
@@ -251,13 +251,13 @@ exports[`<Cap /> should render correct component 1`] = `
|
|
|
251
251
|
"creatives.componentsV2.CapImageUpload.imageErrorDesc": "Please upload the image with allowed file extension, size, dimension and aspect ratio",
|
|
252
252
|
"creatives.componentsV2.CapImageUpload.imageGallery": "Gallery",
|
|
253
253
|
"creatives.componentsV2.CapImageUpload.imageReUpload": "Reupload",
|
|
254
|
-
"creatives.componentsV2.CapImageUpload.imageSize": "Size
|
|
254
|
+
"creatives.componentsV2.CapImageUpload.imageSize": "Size upto: 2MB",
|
|
255
255
|
"creatives.componentsV2.CapImageUpload.or": "OR",
|
|
256
256
|
"creatives.componentsV2.CapImageUpload.uploadComputer": "Select from computer",
|
|
257
257
|
"creatives.componentsV2.CapImageUpload.uploadGallery": "Gallery",
|
|
258
258
|
"creatives.componentsV2.CapImageUpload.uploadImageDescription": "The relevant image that complements the message context.",
|
|
259
259
|
"creatives.componentsV2.CapImageUpload.whatsappAspectRatio": "Max aspect ratio: 1.91:1",
|
|
260
|
-
"creatives.componentsV2.CapImageUpload.whatsappImageSize": "Size
|
|
260
|
+
"creatives.componentsV2.CapImageUpload.whatsappImageSize": "Size upto: 5MB",
|
|
261
261
|
"creatives.componentsV2.CapTagList.Cancel": "Cancel",
|
|
262
262
|
"creatives.componentsV2.CapTagList.Ok": "Ok",
|
|
263
263
|
"creatives.componentsV2.CapTagList.all": "All",
|
|
@@ -1950,7 +1950,6 @@ new message content.",
|
|
|
1950
1950
|
"creatives.containersV2.WeChat.templateName": "Template Name",
|
|
1951
1951
|
"creatives.containersV2.WeChat.wechatCreateSuccess": "WeChat template mapped successfully",
|
|
1952
1952
|
"creatives.containersV2.WeChat.wechatEditSuccess": "WeChat template edited successfully",
|
|
1953
|
-
"creatives.containersV2.WebPush.addLabels": "Add labels",
|
|
1954
1953
|
"creatives.containersV2.Whatsapp.IncorrectCategoryError": "INCORRECT CATEGORY: Message content different from expected content in the category selected. Refer {here} for expected content in each category.",
|
|
1955
1954
|
"creatives.containersV2.Whatsapp.accountUpdate": "Account update",
|
|
1956
1955
|
"creatives.containersV2.Whatsapp.accountUpdateTooltip": "Let customers know about updates or changes to their accounts.",
|
|
@@ -10,7 +10,6 @@ import SmsWrapper from '../SmsWrapper';
|
|
|
10
10
|
import Email from '../Email';
|
|
11
11
|
import EmailWrapper from '../EmailWrapper';
|
|
12
12
|
import MobilepushWrapper from '../MobilepushWrapper';
|
|
13
|
-
import InAppWrapper from '../InAppWrapper';
|
|
14
13
|
import EmailPreviewV2 from '../../v2Components/EmailPreviewV2';
|
|
15
14
|
import MobilePushPreview from '../../v2Components/MobilePushPreviewV2';
|
|
16
15
|
import WechatWrapper from '../WeChat/Wrapper';
|
|
@@ -120,11 +119,7 @@ export function SlideBoxContent(props) {
|
|
|
120
119
|
emailCreateMode,
|
|
121
120
|
onMobilepushModeChange,
|
|
122
121
|
mobilePushCreateMode,
|
|
123
|
-
onInAppEditorTypeChange,
|
|
124
|
-
inAppEditorType,
|
|
125
122
|
templateStep,
|
|
126
|
-
inAppCreateMode,
|
|
127
|
-
onInAppModeChange,
|
|
128
123
|
onEnterTemplateName,
|
|
129
124
|
onRemoveTemplateName,
|
|
130
125
|
onCreateNextStep,
|
|
@@ -138,6 +133,7 @@ export function SlideBoxContent(props) {
|
|
|
138
133
|
onValidationFail,
|
|
139
134
|
channelsToHide,
|
|
140
135
|
forwardedTags,
|
|
136
|
+
supportedTags = [],
|
|
141
137
|
selectedOfferDetails,
|
|
142
138
|
channelsToDisable,
|
|
143
139
|
weChatTemplateType,
|
|
@@ -173,8 +169,6 @@ export function SlideBoxContent(props) {
|
|
|
173
169
|
handleTestAndPreview,
|
|
174
170
|
handleCloseTestAndPreview,
|
|
175
171
|
isTestAndPreviewMode,
|
|
176
|
-
supportedTags = [],
|
|
177
|
-
onHtmlEditorValidationStateChange,
|
|
178
172
|
} = props;
|
|
179
173
|
const type = (messageDetails.type || '').toLowerCase(); // type is context in get tags values : outbound | dvs | referral | loyalty | coupons
|
|
180
174
|
const query = { type: !isFullMode && 'embedded', module: isFullMode ? 'default' : 'library', isEditFromCampaigns: (templateData || {}).isEditFromCampaigns};
|
|
@@ -674,95 +668,44 @@ export function SlideBoxContent(props) {
|
|
|
674
668
|
handleTestAndPreview={handleTestAndPreview}
|
|
675
669
|
handleCloseTestAndPreview={handleCloseTestAndPreview}
|
|
676
670
|
isTestAndPreviewMode={isTestAndPreviewMode}
|
|
677
|
-
location={location}
|
|
678
|
-
onHtmlEditorValidationStateChange={onHtmlEditorValidationStateChange}
|
|
679
671
|
/>
|
|
680
672
|
)}
|
|
681
673
|
{(isEditEmailWithId || isEmailEditWithContent) && (
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
isTestAndPreviewMode={isTestAndPreviewMode}
|
|
718
|
-
onHtmlEditorValidationStateChange={onHtmlEditorValidationStateChange}
|
|
719
|
-
/>
|
|
720
|
-
);
|
|
721
|
-
}
|
|
722
|
-
// HTML template: Use EmailWrapper component (which uses EmailWithoutSaga)
|
|
723
|
-
return (
|
|
724
|
-
<EmailWrapper
|
|
725
|
-
key="cretives-container-email-edit-wrapper"
|
|
726
|
-
setIsLoadingContent={setIsLoadingContent}
|
|
727
|
-
onEmailModeChange={onEmailModeChange}
|
|
728
|
-
emailCreateMode="editor"
|
|
729
|
-
isGetFormData={isGetFormData}
|
|
730
|
-
getFormdata={getFormData}
|
|
731
|
-
templateData={templateData}
|
|
732
|
-
type={type}
|
|
733
|
-
step="createTemplateContent"
|
|
734
|
-
showNextStep={onCreateNextStep}
|
|
735
|
-
isFullMode={isFullMode}
|
|
736
|
-
editor={editor}
|
|
737
|
-
cap={cap}
|
|
738
|
-
onResetStep={onResetStep}
|
|
739
|
-
showTemplateName={showTemplateName}
|
|
740
|
-
onEnterTemplateName={onEnterTemplateName}
|
|
741
|
-
onRemoveTemplateName={onRemoveTemplateName}
|
|
742
|
-
onValidationFail={onValidationFail}
|
|
743
|
-
forwardedTags={forwardedTags}
|
|
744
|
-
selectedOfferDetails={selectedOfferDetails}
|
|
745
|
-
onPreviewContentClicked={onPreviewContentClicked}
|
|
746
|
-
onTestContentClicked={onTestContentClicked}
|
|
747
|
-
getCmsTemplatesInProgress={getCmsTemplatesInProgress}
|
|
748
|
-
moduleType={moduleType}
|
|
749
|
-
showLiquidErrorInFooter={showLiquidErrorInFooter}
|
|
750
|
-
eventContextTags={eventContextTags}
|
|
751
|
-
isLoyaltyModule={isLoyaltyModule}
|
|
752
|
-
showTestAndPreviewSlidebox={showTestAndPreviewSlidebox}
|
|
753
|
-
handleTestAndPreview={handleTestAndPreview}
|
|
754
|
-
handleCloseTestAndPreview={handleCloseTestAndPreview}
|
|
755
|
-
isTestAndPreviewMode={isTestAndPreviewMode}
|
|
756
|
-
onHtmlEditorValidationStateChange={onHtmlEditorValidationStateChange}
|
|
757
|
-
location={{
|
|
758
|
-
pathname: `/email/edit/${templateData._id}`,
|
|
759
|
-
query: { type: 'embedded', module: 'library', id: templateData._id },
|
|
760
|
-
}}
|
|
761
|
-
params={{ id: templateData._id }}
|
|
762
|
-
/>
|
|
763
|
-
);
|
|
764
|
-
})()
|
|
765
|
-
)}
|
|
674
|
+
<Email
|
|
675
|
+
key="cretives-container-email-edit"
|
|
676
|
+
setIsLoadingContent={setIsLoadingContent}
|
|
677
|
+
location={{
|
|
678
|
+
pathname: `/email/edit`,
|
|
679
|
+
query: { type: 'embedded', module: 'library'},
|
|
680
|
+
}}
|
|
681
|
+
route={{ name: 'email' }}
|
|
682
|
+
isGetFormData={isGetFormData}
|
|
683
|
+
getFormdata={getFormData}
|
|
684
|
+
params={{ id: templateData._id }}
|
|
685
|
+
templateData={templateData}
|
|
686
|
+
getFormSubscriptionData={getFormData}
|
|
687
|
+
getDefaultTags={type}
|
|
688
|
+
isFullMode={isFullMode}
|
|
689
|
+
editor={editor}
|
|
690
|
+
cap={cap}
|
|
691
|
+
showTemplateName={showTemplateName}
|
|
692
|
+
onValidationFail={onValidationFail}
|
|
693
|
+
forwardedTags={forwardedTags}
|
|
694
|
+
selectedOfferDetails={selectedOfferDetails}
|
|
695
|
+
onPreviewContentClicked={onPreviewContentClicked}
|
|
696
|
+
onTestContentClicked={onTestContentClicked}
|
|
697
|
+
moduleType={moduleType}
|
|
698
|
+
showLiquidErrorInFooter={showLiquidErrorInFooter}
|
|
699
|
+
eventContextTags={eventContextTags}
|
|
700
|
+
isLoyaltyModule={isLoyaltyModule}
|
|
701
|
+
showTestAndPreviewSlidebox={showTestAndPreviewSlidebox}
|
|
702
|
+
handleTestAndPreview={handleTestAndPreview}
|
|
703
|
+
handleCloseTestAndPreview={handleCloseTestAndPreview}
|
|
704
|
+
isTestAndPreviewMode={(() => {
|
|
705
|
+
return isTestAndPreviewMode;
|
|
706
|
+
})()}
|
|
707
|
+
/>
|
|
708
|
+
)}
|
|
766
709
|
{isEditMPush && (
|
|
767
710
|
(isFullMode && !commonUtil.hasNewMobilePushFeatureEnabled()) ||
|
|
768
711
|
(!isFullMode && isLoyaltyModule) ||
|
|
@@ -1056,39 +999,22 @@ export function SlideBoxContent(props) {
|
|
|
1056
999
|
/>
|
|
1057
1000
|
)}
|
|
1058
1001
|
|
|
1059
|
-
{isCreateInApp && (
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
showTemplateName={showTemplateName}
|
|
1076
|
-
onEnterTemplateName={onEnterTemplateName}
|
|
1077
|
-
onRemoveTemplateName={onRemoveTemplateName}
|
|
1078
|
-
onValidationFail={onValidationFail}
|
|
1079
|
-
forwardedTags={forwardedTags}
|
|
1080
|
-
selectedOfferDetails={selectedOfferDetails}
|
|
1081
|
-
onPreviewContentClicked={onPreviewContentClicked}
|
|
1082
|
-
onTestContentClicked={onTestContentClicked}
|
|
1083
|
-
moduleType={moduleType}
|
|
1084
|
-
showLiquidErrorInFooter={showLiquidErrorInFooter}
|
|
1085
|
-
eventContextTags={eventContextTags}
|
|
1086
|
-
onCreateComplete={onCreateComplete}
|
|
1087
|
-
handleClose={handleClose}
|
|
1088
|
-
getDefaultTags={type}
|
|
1089
|
-
onInAppModeChange={onInAppModeChange}
|
|
1090
|
-
inAppCreateMode={inAppCreateMode}
|
|
1091
|
-
showTestAndPreviewSlidebox={showTestAndPreviewSlidebox}
|
|
1002
|
+
{isCreateInApp && (<InApp
|
|
1003
|
+
isFullMode={isFullMode}
|
|
1004
|
+
onCreateComplete={onCreateComplete}
|
|
1005
|
+
handleClose={handleClose}
|
|
1006
|
+
location={{
|
|
1007
|
+
pathname: `/inapp/create`,
|
|
1008
|
+
query,
|
|
1009
|
+
search: '',
|
|
1010
|
+
}}
|
|
1011
|
+
getFormData={getFormData}
|
|
1012
|
+
isGetFormData={isGetFormData}
|
|
1013
|
+
templateData={templateData}
|
|
1014
|
+
getDefaultTags={type}
|
|
1015
|
+
eventContextTags={eventContextTags}
|
|
1016
|
+
showLiquidErrorInFooter={showLiquidErrorInFooter}
|
|
1017
|
+
showTestAndPreviewSlidebox={showTestAndPreviewSlidebox}
|
|
1092
1018
|
handleTestAndPreview={handleTestAndPreview}
|
|
1093
1019
|
handleCloseTestAndPreview={handleCloseTestAndPreview}
|
|
1094
1020
|
isTestAndPreviewMode={isTestAndPreviewMode}
|
|
@@ -1179,8 +1105,6 @@ SlideBoxContent.propTypes = {
|
|
|
1179
1105
|
onSelectTemplate: PropTypes.func,
|
|
1180
1106
|
onPreviewTemplate: PropTypes.func,
|
|
1181
1107
|
templateData: PropTypes.object,
|
|
1182
|
-
onInAppEditorTypeChange: PropTypes.func,
|
|
1183
|
-
inAppEditorType: PropTypes.object,
|
|
1184
1108
|
location: PropTypes.object,
|
|
1185
1109
|
isGetFormData: PropTypes.bool,
|
|
1186
1110
|
getFormData: PropTypes.func,
|