@capillarytech/creatives-library 8.0.246-alpha.0 → 8.0.246
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 -18
- package/utils/common.js +0 -5
- 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 -447
- package/v2Components/ErrorInfoNote/messages.js +0 -22
- package/v2Components/ErrorInfoNote/style.scss +4 -280
- package/v2Components/FormBuilder/tests/index.test.js +4 -13
- package/v2Components/HtmlEditor/HTMLEditor.js +94 -642
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1135
- package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +16 -27
- package/v2Components/HtmlEditor/_htmlEditor.scss +45 -108
- 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/_editorToolbar.scss +0 -9
- package/v2Components/HtmlEditor/components/EditorToolbar/index.js +1 -1
- 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 +13 -11
- 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/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/hooks/useValidation.js +45 -150
- package/v2Components/HtmlEditor/index.js +1 -1
- package/v2Components/HtmlEditor/messages.js +85 -95
- 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 -44
- package/v2Components/TemplatePreview/index.js +32 -47
- package/v2Components/TemplatePreview/messages.js +0 -4
- package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
- package/v2Components/TestAndPreviewSlidebox/index.js +25 -31
- package/v2Containers/BeeEditor/index.js +90 -172
- package/v2Containers/CreativesContainer/SlideBoxContent.js +51 -128
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +12 -113
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -2
- package/v2Containers/CreativesContainer/constants.js +0 -1
- package/v2Containers/CreativesContainer/index.js +46 -238
- 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 -91
- package/v2Containers/Email/actions.js +0 -7
- package/v2Containers/Email/constants.js +1 -5
- package/v2Containers/Email/index.js +30 -229
- 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/sagas.test.js +1 -1
- package/v2Containers/EmailWrapper/components/EmailWrapperView.js +15 -210
- 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 -61
- package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +77 -509
- package/v2Containers/InApp/actions.js +0 -7
- package/v2Containers/InApp/constants.js +4 -20
- package/v2Containers/InApp/index.js +357 -801
- 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/_templates.scss +1 -60
- package/v2Containers/Templates/index.js +4 -89
- package/v2Containers/Templates/messages.js +0 -4
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +0 -35
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -874
- package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -254
- package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -363
- package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
- package/v2Components/HtmlEditor/hooks/__tests__/useValidation.apiErrors.test.js +0 -630
- 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 -1317
- package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -1605
- 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 -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
|
@@ -16,7 +16,7 @@ const VALIDATION_SOURCES = {
|
|
|
16
16
|
EMAIL_SPECIFIC: 'email-specific',
|
|
17
17
|
INAPP_SPECIFIC: 'inapp-specific',
|
|
18
18
|
EMAIL_COMPATIBILITY: 'email-compatibility',
|
|
19
|
-
MOBILE_OPTIMIZATION: 'mobile-optimization'
|
|
19
|
+
MOBILE_OPTIMIZATION: 'mobile-optimization'
|
|
20
20
|
};
|
|
21
21
|
|
|
22
22
|
/**
|
|
@@ -30,47 +30,42 @@ export const transformValidationToErrorInfo = (validation, variant = 'email') =>
|
|
|
30
30
|
return { errorMessages: { LIQUID_ERROR_MSG: [], STANDARD_ERROR_MSG: [] } };
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
if (typeof validation.getAllIssues !== 'function') {
|
|
34
|
-
console.warn('[validationAdapter] validation.getAllIssues is not a function:', validation);
|
|
35
|
-
return { errorMessages: { LIQUID_ERROR_MSG: [], STANDARD_ERROR_MSG: [] } };
|
|
36
|
-
}
|
|
37
|
-
|
|
38
33
|
const allIssues = validation.getAllIssues();
|
|
39
|
-
// Safety check: ensure allIssues is an array
|
|
40
|
-
if (!Array.isArray(allIssues)) {
|
|
41
|
-
console.warn('[validationAdapter] validation.getAllIssues() did not return an array:', allIssues);
|
|
42
|
-
return { errorMessages: { LIQUID_ERROR_MSG: [], STANDARD_ERROR_MSG: [] } };
|
|
43
|
-
}
|
|
44
34
|
|
|
45
35
|
// Separate liquid and standard errors
|
|
46
|
-
const liquidErrors = allIssues.filter(
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
36
|
+
const liquidErrors = allIssues.filter(issue =>
|
|
37
|
+
issue.source === VALIDATION_SOURCES.LIQUID ||
|
|
38
|
+
issue.rule?.includes('liquid') ||
|
|
39
|
+
issue.message?.toLowerCase().includes('liquid')
|
|
40
|
+
);
|
|
41
|
+
|
|
42
|
+
const standardErrors = allIssues.filter(issue =>
|
|
43
|
+
issue.source !== VALIDATION_SOURCES.LIQUID &&
|
|
44
|
+
!issue.rule?.includes('liquid') &&
|
|
45
|
+
!issue.message?.toLowerCase().includes('liquid')
|
|
46
|
+
);
|
|
53
47
|
|
|
54
48
|
// Format errors for ErrorInfoNote
|
|
55
|
-
const formatErrors = (errors) =>
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
49
|
+
const formatErrors = (errors) =>
|
|
50
|
+
errors.map(error => {
|
|
51
|
+
let message = error.message;
|
|
52
|
+
|
|
53
|
+
// Add line/column info if available
|
|
54
|
+
if (error.line) {
|
|
55
|
+
message += ` Line ${error.line}`;
|
|
56
|
+
if (error.column) {
|
|
57
|
+
message += `, Char ${error.column}`;
|
|
58
|
+
}
|
|
59
|
+
message += '.';
|
|
63
60
|
}
|
|
64
|
-
message += '.';
|
|
65
|
-
}
|
|
66
61
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
62
|
+
// Add rule info if available
|
|
63
|
+
if (error.rule) {
|
|
64
|
+
message += ` • ${error.rule}`;
|
|
65
|
+
}
|
|
71
66
|
|
|
72
|
-
|
|
73
|
-
|
|
67
|
+
return message;
|
|
68
|
+
});
|
|
74
69
|
|
|
75
70
|
// Handle InApp variant with platform-specific errors (if needed in future)
|
|
76
71
|
if (variant === 'inapp') {
|
|
@@ -79,8 +74,8 @@ export const transformValidationToErrorInfo = (validation, variant = 'email') =>
|
|
|
79
74
|
return {
|
|
80
75
|
errorMessages: {
|
|
81
76
|
LIQUID_ERROR_MSG: formatErrors(liquidErrors),
|
|
82
|
-
STANDARD_ERROR_MSG: formatErrors(standardErrors)
|
|
83
|
-
}
|
|
77
|
+
STANDARD_ERROR_MSG: formatErrors(standardErrors)
|
|
78
|
+
}
|
|
84
79
|
};
|
|
85
80
|
}
|
|
86
81
|
|
|
@@ -88,8 +83,8 @@ export const transformValidationToErrorInfo = (validation, variant = 'email') =>
|
|
|
88
83
|
return {
|
|
89
84
|
errorMessages: {
|
|
90
85
|
LIQUID_ERROR_MSG: formatErrors(liquidErrors),
|
|
91
|
-
STANDARD_ERROR_MSG: formatErrors(standardErrors)
|
|
92
|
-
}
|
|
86
|
+
STANDARD_ERROR_MSG: formatErrors(standardErrors)
|
|
87
|
+
}
|
|
93
88
|
};
|
|
94
89
|
};
|
|
95
90
|
|
|
@@ -103,18 +98,7 @@ export const hasValidationErrors = (validation) => {
|
|
|
103
98
|
return false;
|
|
104
99
|
}
|
|
105
100
|
|
|
106
|
-
if (typeof validation.getAllIssues !== 'function') {
|
|
107
|
-
console.warn('[validationAdapter] validation.getAllIssues is not a function:', validation);
|
|
108
|
-
return false;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
101
|
const allIssues = validation.getAllIssues();
|
|
112
|
-
// Safety check: ensure allIssues is an array
|
|
113
|
-
if (!Array.isArray(allIssues)) {
|
|
114
|
-
console.warn('[validationAdapter] validation.getAllIssues() did not return an array:', allIssues);
|
|
115
|
-
return false;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
102
|
return allIssues.length > 0;
|
|
119
103
|
};
|
|
120
104
|
|
|
@@ -128,28 +112,19 @@ export const getValidationSummary = (validation) => {
|
|
|
128
112
|
return { totalErrors: 0, totalWarnings: 0, hasLiquidErrors: false };
|
|
129
113
|
}
|
|
130
114
|
|
|
131
|
-
if (typeof validation.getAllIssues !== 'function') {
|
|
132
|
-
console.warn('[validationAdapter] validation.getAllIssues is not a function:', validation);
|
|
133
|
-
return { totalErrors: 0, totalWarnings: 0, hasLiquidErrors: false };
|
|
134
|
-
}
|
|
135
|
-
|
|
136
115
|
const allIssues = validation.getAllIssues();
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
const warnings = allIssues.filter((issue) => issue.severity === 'warning');
|
|
145
|
-
const liquidErrors = allIssues.filter((issue) => issue.source === VALIDATION_SOURCES.LIQUID
|
|
146
|
-
|| issue.rule?.includes('liquid')
|
|
147
|
-
|| issue.message?.toLowerCase().includes('liquid'));
|
|
116
|
+
const errors = allIssues.filter(issue => issue.severity === 'error');
|
|
117
|
+
const warnings = allIssues.filter(issue => issue.severity === 'warning');
|
|
118
|
+
const liquidErrors = allIssues.filter(issue =>
|
|
119
|
+
issue.source === VALIDATION_SOURCES.LIQUID ||
|
|
120
|
+
issue.rule?.includes('liquid') ||
|
|
121
|
+
issue.message?.toLowerCase().includes('liquid')
|
|
122
|
+
);
|
|
148
123
|
|
|
149
124
|
return {
|
|
150
125
|
totalErrors: errors.length,
|
|
151
126
|
totalWarnings: warnings.length,
|
|
152
127
|
hasLiquidErrors: liquidErrors.length > 0,
|
|
153
|
-
totalIssues: allIssues.length
|
|
128
|
+
totalIssues: allIssues.length
|
|
154
129
|
};
|
|
155
130
|
};
|
|
@@ -26,17 +26,8 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
|
|
|
26
26
|
this.getPreview = this.getPreview.bind(this);
|
|
27
27
|
this.setContent = this.setContent.bind(this);
|
|
28
28
|
this.goToDuplicate = this.goToDuplicate.bind(this);
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
let hasAndroid;
|
|
32
|
-
let hasIos;
|
|
33
|
-
if (channel === INAPP.toUpperCase()) {
|
|
34
|
-
hasAndroid = get(templateData, 'versions.base.content.ANDROID') || get(templateData, 'androidContent');
|
|
35
|
-
hasIos = get(templateData, 'versions.base.content.IOS') || get(templateData, 'iosContent');
|
|
36
|
-
} else {
|
|
37
|
-
hasAndroid = get(templateData, 'versions.base.ANDROID') || get(templateData, 'androidContent.title');
|
|
38
|
-
hasIos = get(templateData, 'versions.base.IOS') || get(templateData, 'iosContent.title');
|
|
39
|
-
}
|
|
29
|
+
const hasAndroid = get(props, 'templateData.versions.base.ANDROID') || get(props, 'templateData.androidContent.title');
|
|
30
|
+
const hasIos = get(props, 'templateData.versions.base.IOS') || get(props, 'templateData.iosContent.title');
|
|
40
31
|
let device = "android";
|
|
41
32
|
if (hasAndroid) {
|
|
42
33
|
device = 'android';
|
|
@@ -54,17 +45,6 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
|
|
|
54
45
|
if (channel === INAPP.toUpperCase()) {
|
|
55
46
|
const androidContent = get(templateData, 'versions.base.content.ANDROID') || get(templateData, 'androidContent');
|
|
56
47
|
const iosContent = get(templateData, 'versions.base.content.IOS') || get(templateData, 'iosContent');
|
|
57
|
-
const isBeeFreeTemplate = get(androidContent, 'isBEEeditor') || get(iosContent, 'isBEEeditor');
|
|
58
|
-
if (isBeeFreeTemplate) {
|
|
59
|
-
// Normalize device to 'android' or 'ios' for comparison
|
|
60
|
-
const normalizedDevice = device === 'iphone' ? 'ios' : device?.toLowerCase();
|
|
61
|
-
const isAndroid = normalizedDevice === ANDROID.toLowerCase();
|
|
62
|
-
content = {
|
|
63
|
-
inAppPreviewContent: isAndroid ? androidContent?.beeHtml : iosContent?.beeHtml,
|
|
64
|
-
isBeeFreeTemplate: true,
|
|
65
|
-
};
|
|
66
|
-
return content;
|
|
67
|
-
}
|
|
68
48
|
const androidPreviewContent = {
|
|
69
49
|
templateTitle: androidContent?.title,
|
|
70
50
|
templateMsg: androidContent?.message,
|
|
@@ -77,12 +57,9 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
|
|
|
77
57
|
mediaPreview: { inAppImageSrcIos: iosContent?.expandableDetails?.image },
|
|
78
58
|
ctaData: getCtaObject(iosContent?.expandableDetails?.ctas),
|
|
79
59
|
};
|
|
80
|
-
// Normalize device to 'android' or 'ios' for comparison
|
|
81
|
-
const normalizedDevice = device === 'iphone' ? 'ios' : device?.toLowerCase();
|
|
82
|
-
const isAndroid = normalizedDevice === ANDROID.toLowerCase();
|
|
83
60
|
content = {
|
|
84
|
-
inAppPreviewContent:
|
|
85
|
-
templateLayoutType:
|
|
61
|
+
inAppPreviewContent: device === ANDROID.toLowerCase() ? androidPreviewContent : iosPreviewContent,
|
|
62
|
+
templateLayoutType: device === ANDROID.toLowerCase() ? androidContent?.bodyType : iosContent?.bodyType,
|
|
86
63
|
};
|
|
87
64
|
} else if (channel === MOBILE_PUSH) {
|
|
88
65
|
const androidContent = get(templateData, 'versions.base.ANDROID') || get(templateData, 'androidContent');
|
|
@@ -148,9 +125,7 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
|
|
|
148
125
|
}
|
|
149
126
|
|
|
150
127
|
getPreview(device) {
|
|
151
|
-
|
|
152
|
-
const normalizedDevice = device === 'iphone' ? 'ios' : device?.toLowerCase();
|
|
153
|
-
const deviceParam = normalizedDevice === ANDROID.toLowerCase() ? ANDROID : IOS;
|
|
128
|
+
const deviceParam = device === ANDROID.toLowerCase() ? ANDROID : IOS;
|
|
154
129
|
return (
|
|
155
130
|
<TemplatePreview
|
|
156
131
|
device={this.props.channel === INAPP.toUpperCase() ? deviceParam : device}
|
|
@@ -184,8 +159,8 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
|
|
|
184
159
|
hasAndroid = get(templateData, 'versions.base.ANDROID') || get(templateData, 'androidContent.title');
|
|
185
160
|
hasIos = get(templateData, 'versions.base.IOS') || get(templateData, 'iosContent.title');
|
|
186
161
|
} else if (this.props.channel === INAPP.toUpperCase()) {
|
|
187
|
-
hasAndroid = get(templateData, 'versions.base.content.ANDROID') || get(templateData, 'androidContent');
|
|
188
|
-
hasIos = get(templateData, 'versions.base.content.IOS') || get(templateData, 'iosContent');
|
|
162
|
+
hasAndroid = get(templateData, 'versions.base.content.ANDROID') || get(templateData, 'androidContent.title');
|
|
163
|
+
hasIos = get(templateData, 'versions.base.content.IOS') || get(templateData, 'iosContent.title');
|
|
189
164
|
}
|
|
190
165
|
const hasBothAndroidAndIos = hasAndroid && hasIos;
|
|
191
166
|
return (
|
|
@@ -16,11 +16,10 @@
|
|
|
16
16
|
&.mobilepush
|
|
17
17
|
|
|
18
18
|
.inapp-message-container-POPUP-ANDROID {
|
|
19
|
-
background-color: $CAP_WHITE;
|
|
20
19
|
position: absolute;
|
|
21
|
-
top:
|
|
20
|
+
top: 20%;
|
|
22
21
|
display: flex;
|
|
23
|
-
width:
|
|
22
|
+
width: 200px;
|
|
24
23
|
left: 28%;
|
|
25
24
|
|
|
26
25
|
.inapp-title-POPUP-ANDROID {
|
|
@@ -60,10 +59,10 @@
|
|
|
60
59
|
.inapp-message-container-HEADER-ANDROID {
|
|
61
60
|
position: absolute;
|
|
62
61
|
display: flex;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
// bottom: 19.4rem;
|
|
63
|
+
width: 200px;
|
|
64
|
+
left: 28%;
|
|
65
|
+
top: 20px;
|
|
67
66
|
|
|
68
67
|
.inapp-title-HEADER-ANDROID {
|
|
69
68
|
left: 34%;
|
|
@@ -130,24 +129,22 @@
|
|
|
130
129
|
|
|
131
130
|
|
|
132
131
|
.inapp-message-container-FOOTER-ANDROID {
|
|
133
|
-
background-color: $CAP_WHITE;
|
|
134
132
|
position: absolute;
|
|
135
133
|
display: flex;
|
|
136
134
|
justify-content: center;
|
|
137
|
-
bottom:
|
|
138
|
-
width:
|
|
139
|
-
left:
|
|
140
|
-
background-color: $CAP_WHITE;
|
|
135
|
+
bottom: 1.5%;
|
|
136
|
+
width: 200px;
|
|
137
|
+
left: 28%;
|
|
141
138
|
|
|
142
139
|
.inapp-title-FOOTER-ANDROID {
|
|
143
|
-
width:
|
|
140
|
+
width: 90px;
|
|
144
141
|
height: 12px;
|
|
145
142
|
text-align: left;
|
|
146
143
|
left: 34%;
|
|
147
144
|
justify-content: center;
|
|
148
145
|
position: relative;
|
|
149
146
|
right: 33%;
|
|
150
|
-
bottom: -
|
|
147
|
+
bottom: -22px;
|
|
151
148
|
font-size: 10px;
|
|
152
149
|
text-overflow: ellipsis;
|
|
153
150
|
overflow: hidden;
|
|
@@ -204,12 +201,10 @@
|
|
|
204
201
|
}
|
|
205
202
|
|
|
206
203
|
.inapp-message-container-FULLSCREEN-ANDROID {
|
|
207
|
-
background-color: $CAP_WHITE;
|
|
208
204
|
position: absolute;
|
|
209
205
|
top: 10%;
|
|
210
206
|
display: flex;
|
|
211
|
-
left:
|
|
212
|
-
width: 16.643rem;
|
|
207
|
+
left: 29%;
|
|
213
208
|
.inapp-title-FULLSCREEN-ANDROID {
|
|
214
209
|
text-overflow: ellipsis;
|
|
215
210
|
overflow: hidden;
|
|
@@ -243,11 +238,10 @@
|
|
|
243
238
|
}
|
|
244
239
|
|
|
245
240
|
.inapp-message-container-POPUP-iOS {
|
|
246
|
-
background-color: $CAP_WHITE;
|
|
247
241
|
position: absolute;
|
|
248
|
-
top:
|
|
242
|
+
top: 20%;
|
|
249
243
|
display: flex;
|
|
250
|
-
width:
|
|
244
|
+
width: 200px;
|
|
251
245
|
left: 28%;
|
|
252
246
|
|
|
253
247
|
.inapp-title-POPUP-iOS {
|
|
@@ -284,19 +278,18 @@
|
|
|
284
278
|
}
|
|
285
279
|
|
|
286
280
|
.inapp-message-container-HEADER-iOS {
|
|
287
|
-
background-color: $CAP_WHITE;
|
|
288
281
|
position: absolute;
|
|
289
282
|
display: flex;
|
|
290
|
-
width:
|
|
291
|
-
left:
|
|
292
|
-
top:
|
|
283
|
+
width: 200px;
|
|
284
|
+
left: 28%;
|
|
285
|
+
top: 3%;
|
|
293
286
|
|
|
294
287
|
.inapp-title-HEADER-iOS {
|
|
295
288
|
left: 34%;
|
|
296
289
|
top: 15%;
|
|
297
290
|
position: relative;
|
|
298
291
|
font-size: 10px;
|
|
299
|
-
width:
|
|
292
|
+
width: 90px;
|
|
300
293
|
height: 12px;
|
|
301
294
|
text-overflow: ellipsis;
|
|
302
295
|
overflow: hidden;
|
|
@@ -307,7 +300,7 @@
|
|
|
307
300
|
|
|
308
301
|
.without-image-title-HEADER-ios {
|
|
309
302
|
left: 26%;
|
|
310
|
-
top:
|
|
303
|
+
top: 18px;
|
|
311
304
|
text-align: center;
|
|
312
305
|
}
|
|
313
306
|
|
|
@@ -337,7 +330,7 @@
|
|
|
337
330
|
.without-image-content-HEADER-ios {
|
|
338
331
|
width: 92%;
|
|
339
332
|
left: 6%;
|
|
340
|
-
top:
|
|
333
|
+
top: 21px;
|
|
341
334
|
}
|
|
342
335
|
|
|
343
336
|
.inapp-button-HEADER-iOS {
|
|
@@ -354,14 +347,12 @@
|
|
|
354
347
|
}
|
|
355
348
|
|
|
356
349
|
.inapp-message-container-FOOTER-iOS {
|
|
357
|
-
background-color: $CAP_WHITE;
|
|
358
350
|
position: absolute;
|
|
359
351
|
display: flex;
|
|
360
352
|
justify-content: center;
|
|
361
|
-
width:
|
|
362
|
-
left:
|
|
363
|
-
top:
|
|
364
|
-
bottom: 3.5%;
|
|
353
|
+
width: 200px;
|
|
354
|
+
left: 28%;
|
|
355
|
+
top: 75%;
|
|
365
356
|
|
|
366
357
|
.inapp-title-FOOTER-iOS {
|
|
367
358
|
width: 90px;
|
|
@@ -429,12 +420,10 @@
|
|
|
429
420
|
}
|
|
430
421
|
|
|
431
422
|
.inapp-message-container-FULLSCREEN-iOS {
|
|
432
|
-
background-color: $CAP_WHITE;
|
|
433
423
|
position: absolute;
|
|
434
424
|
top: 10%;
|
|
435
425
|
display: flex;
|
|
436
|
-
left:
|
|
437
|
-
width: 16.643rem;
|
|
426
|
+
left: 29%;
|
|
438
427
|
.inapp-title-FULLSCREEN-iOS {
|
|
439
428
|
text-overflow: ellipsis;
|
|
440
429
|
overflow: hidden;
|
|
@@ -466,15 +455,6 @@
|
|
|
466
455
|
bottom: -1%;
|
|
467
456
|
}
|
|
468
457
|
}
|
|
469
|
-
|
|
470
|
-
.inapp-message-container-MODAL-ANDROID, .inapp-message-container-MODAL-iOS {
|
|
471
|
-
background-color: $CAP_WHITE;
|
|
472
|
-
position: absolute;
|
|
473
|
-
top: 30%;
|
|
474
|
-
display: flex;
|
|
475
|
-
width: 14.286rem;
|
|
476
|
-
left: 28%;
|
|
477
|
-
}
|
|
478
458
|
}
|
|
479
459
|
|
|
480
460
|
|
|
@@ -37,8 +37,14 @@ import {
|
|
|
37
37
|
import { VIBER, FACEBOOK } from '../../v2Containers/App/constants';
|
|
38
38
|
import Carousel from '../Carousel';
|
|
39
39
|
import whatsappMobileAndroid from './assets/images/whatsapp_mobile_android.svg';
|
|
40
|
-
import
|
|
41
|
-
import
|
|
40
|
+
import inAppMobileAndroidModal from './assets/images/inapp_mobile_android_modal.svg';
|
|
41
|
+
import inAppMobileAndroidTop from './assets/images/inapp_mobile_android_top.svg';
|
|
42
|
+
import inAppMobileAndroidBottom from './assets/images/inapp_mobile_android_bottom.svg';
|
|
43
|
+
import inAppMobileAndroidFull from './assets/images/inapp_mobile_android_full.svg';
|
|
44
|
+
import inAppMobileIOSModal from './assets/images/inapp_mobile_ios_modal.svg';
|
|
45
|
+
import inAppMobileIOSTop from './assets/images/inapp_mobile_ios_top.svg';
|
|
46
|
+
import inAppMobileIOSBottom from './assets/images/inapp_mobile_ios_bottom.svg';
|
|
47
|
+
import inAppMobileIOSFull from './assets/images/inapp_mobile_ios_full.svg';
|
|
42
48
|
import whatsappImageEmptyPreview from './assets/images/empty_image_preview.svg';
|
|
43
49
|
import whatsappVideoEmptyPreview from './assets/images/empty_video_preview.svg';
|
|
44
50
|
import videoPlay from '../../assets/videoPlay.svg';
|
|
@@ -233,7 +239,7 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
|
|
|
233
239
|
} = this.props;
|
|
234
240
|
let content = channel && channel.toLowerCase() === 'sms' ? [this.props.content] : this.props.content;
|
|
235
241
|
const { formatMessage } = intl;
|
|
236
|
-
const { rcsPreviewContent, inAppPreviewContent, viberPreviewContent
|
|
242
|
+
const { rcsPreviewContent, inAppPreviewContent, viberPreviewContent } = content || {};
|
|
237
243
|
const { rcsImageSrc, rcsVideoSrc, rcsTitle, rcsDesc, rcsSuggestions } = rcsPreviewContent || {};
|
|
238
244
|
const {
|
|
239
245
|
videoParams,
|
|
@@ -241,11 +247,7 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
|
|
|
241
247
|
buttonText: viberButtonText,
|
|
242
248
|
messageContent: viberMessageContent,
|
|
243
249
|
} = viberPreviewContent || {};
|
|
244
|
-
let isHTMLContent = true;
|
|
245
250
|
const {mediaPreview = {}, templateTitle = "", templateMsg = "", ctaData} = inAppPreviewContent || {};
|
|
246
|
-
if(templateTitle !== undefined && ctaData !== undefined && templateMsg !== undefined) {
|
|
247
|
-
isHTMLContent = false;
|
|
248
|
-
}
|
|
249
251
|
let smsDetails = {};
|
|
250
252
|
// let smsText = '';
|
|
251
253
|
if (this.props.content && this.props.charCounterEnabled) {
|
|
@@ -462,9 +464,27 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
|
|
|
462
464
|
|
|
463
465
|
const getPreviewImage = () => {
|
|
464
466
|
if (this.props.device === ANDROID) {
|
|
465
|
-
|
|
467
|
+
switch (templateLayoutType) {
|
|
468
|
+
case INAPP_MESSAGE_LAYOUT_TYPES.MODAL:
|
|
469
|
+
return inAppMobileAndroidModal;
|
|
470
|
+
case INAPP_MESSAGE_LAYOUT_TYPES.TOPBANNER:
|
|
471
|
+
return inAppMobileAndroidTop;
|
|
472
|
+
case INAPP_MESSAGE_LAYOUT_TYPES.BOTTOMBANNER:
|
|
473
|
+
return inAppMobileAndroidBottom;
|
|
474
|
+
default:
|
|
475
|
+
return inAppMobileAndroidFull;
|
|
476
|
+
}
|
|
466
477
|
} else {
|
|
467
|
-
|
|
478
|
+
switch (templateLayoutType) {
|
|
479
|
+
case INAPP_MESSAGE_LAYOUT_TYPES.MODAL:
|
|
480
|
+
return inAppMobileIOSModal;
|
|
481
|
+
case INAPP_MESSAGE_LAYOUT_TYPES.TOPBANNER:
|
|
482
|
+
return inAppMobileIOSTop;
|
|
483
|
+
case INAPP_MESSAGE_LAYOUT_TYPES.BOTTOMBANNER:
|
|
484
|
+
return inAppMobileIOSBottom;
|
|
485
|
+
default:
|
|
486
|
+
return inAppMobileIOSFull;
|
|
487
|
+
}
|
|
468
488
|
}
|
|
469
489
|
};
|
|
470
490
|
|
|
@@ -1386,34 +1406,7 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
|
|
|
1386
1406
|
</div>
|
|
1387
1407
|
)}
|
|
1388
1408
|
{channel?.toUpperCase() === INAPP && (
|
|
1389
|
-
|
|
1390
|
-
<div className="shell-v2 align-center">
|
|
1391
|
-
<div style={{ position: 'relative', display: 'inline-block', width: '100%', height: '100%' }}>
|
|
1392
|
-
<CapImage
|
|
1393
|
-
className="preview-image"
|
|
1394
|
-
src={this.props.device === ANDROID ? inAppMobileDeviceAndroid : inAppMobileDeviceIos}
|
|
1395
|
-
alt={formatMessage(messages.previewGenerated)}
|
|
1396
|
-
/>
|
|
1397
|
-
<iframe
|
|
1398
|
-
srcDoc={inAppPreviewContent?.value}
|
|
1399
|
-
title={formatMessage(messages.inappPreview)}
|
|
1400
|
-
style={{
|
|
1401
|
-
position: 'absolute',
|
|
1402
|
-
top: '3rem',
|
|
1403
|
-
left: '5rem',
|
|
1404
|
-
width: '60%',
|
|
1405
|
-
height: '89%',
|
|
1406
|
-
zIndex: 1,
|
|
1407
|
-
pointerEvents: 'none',
|
|
1408
|
-
backgroundColor: 'white',
|
|
1409
|
-
borderRadius: `${CAP_SPACE_08}`,
|
|
1410
|
-
}}
|
|
1411
|
-
frameBorder="0"
|
|
1412
|
-
/>
|
|
1413
|
-
</div>
|
|
1414
|
-
</div>
|
|
1415
|
-
): (
|
|
1416
|
-
<div className="shell-v2 align-center">
|
|
1409
|
+
<div className="shell-v2 align-center">
|
|
1417
1410
|
<CapImage
|
|
1418
1411
|
className="preview-image"
|
|
1419
1412
|
src={getPreviewImage()}
|
|
@@ -1421,15 +1414,9 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
|
|
|
1421
1414
|
/>
|
|
1422
1415
|
<div className="preview-image">
|
|
1423
1416
|
<div
|
|
1424
|
-
className={`inapp-message-container-${templateLayoutType}-${device}
|
|
1417
|
+
className={`inapp-message-container-${templateLayoutType}-${device} sms`}
|
|
1425
1418
|
>
|
|
1426
|
-
|
|
1427
|
-
<div
|
|
1428
|
-
className="inapp-html-content"
|
|
1429
|
-
dangerouslySetInnerHTML={{ __html: templateMsg }}
|
|
1430
|
-
/>
|
|
1431
|
-
) : (
|
|
1432
|
-
<div className="preview-inapp-screen">
|
|
1419
|
+
<div className="preview-inapp-screen">
|
|
1433
1420
|
{
|
|
1434
1421
|
<CapLabel
|
|
1435
1422
|
type="label15"
|
|
@@ -1494,11 +1481,9 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
|
|
|
1494
1481
|
</CapButton>
|
|
1495
1482
|
)}
|
|
1496
1483
|
</div>
|
|
1497
|
-
)}
|
|
1498
1484
|
</div>
|
|
1499
1485
|
</div>
|
|
1500
1486
|
</div>
|
|
1501
|
-
)
|
|
1502
1487
|
)}
|
|
1503
1488
|
</CapRow>
|
|
1504
1489
|
</CapColumn>
|
|
@@ -94,8 +94,4 @@ export default defineMessages({
|
|
|
94
94
|
id: 'creatives.componentsV2.TemplatePreview.videoNotSupported',
|
|
95
95
|
defaultMessage: 'Your browser does not support the video tag.',
|
|
96
96
|
},
|
|
97
|
-
inappPreview: {
|
|
98
|
-
id: 'creatives.componentsV2.TemplatePreview.inappPreview',
|
|
99
|
-
defaultMessage: 'Inapp Preview',
|
|
100
|
-
},
|
|
101
97
|
});
|