@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.
Files changed (157) hide show
  1. package/assets/Android.png +0 -0
  2. package/assets/iOS.png +0 -0
  3. package/constants/unified.js +1 -2
  4. package/initialReducer.js +0 -2
  5. package/package.json +1 -1
  6. package/services/api.js +0 -10
  7. package/services/tests/api.test.js +0 -34
  8. package/translations/en.json +3 -4
  9. package/utils/common.js +0 -12
  10. package/utils/commonUtils.js +5 -28
  11. package/utils/tests/commonUtil.test.js +0 -224
  12. package/utils/transformTemplateConfig.js +10 -0
  13. package/v2Components/CapDeviceContent/index.js +56 -61
  14. package/v2Components/CapTagList/index.js +1 -6
  15. package/v2Components/CapTagListWithInput/index.js +1 -5
  16. package/v2Components/CapTagListWithInput/messages.js +1 -1
  17. package/v2Components/CapWhatsappCTA/tests/index.test.js +0 -5
  18. package/v2Components/ErrorInfoNote/index.js +72 -457
  19. package/v2Components/ErrorInfoNote/messages.js +6 -36
  20. package/v2Components/ErrorInfoNote/style.scss +6 -282
  21. package/v2Components/FormBuilder/index.js +4 -4
  22. package/v2Components/FormBuilder/tests/index.test.js +4 -13
  23. package/v2Components/HtmlEditor/HTMLEditor.js +94 -547
  24. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1441
  25. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +16 -27
  26. package/v2Components/HtmlEditor/_htmlEditor.scss +45 -108
  27. package/v2Components/HtmlEditor/_index.lazy.scss +1 -0
  28. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +102 -23
  29. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +140 -148
  30. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
  31. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  32. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +0 -9
  33. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +4 -4
  34. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -22
  35. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +7 -4
  36. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +45 -35
  37. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +3 -1
  38. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  39. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +6 -7
  40. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +6 -3
  41. package/v2Components/HtmlEditor/components/PreviewPane/index.js +43 -22
  42. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  43. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +152 -0
  44. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/_validationErrorDisplay.scss +0 -1
  45. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -49
  46. package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +34 -50
  47. package/v2Components/HtmlEditor/components/ValidationPanel/index.js +41 -70
  48. package/v2Components/HtmlEditor/constants.js +20 -42
  49. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
  50. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +16 -120
  51. package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
  52. package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
  53. package/v2Components/HtmlEditor/hooks/useValidation.js +53 -189
  54. package/v2Components/HtmlEditor/index.js +1 -1
  55. package/v2Components/HtmlEditor/messages.js +94 -92
  56. package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +45 -94
  57. package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +0 -134
  58. package/v2Components/HtmlEditor/utils/contentSanitizer.js +41 -40
  59. package/v2Components/HtmlEditor/utils/htmlValidator.js +72 -71
  60. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +102 -134
  61. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
  62. package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -66
  63. package/v2Components/MobilePushPreviewV2/index.js +7 -32
  64. package/v2Components/TemplatePreview/_templatePreview.scss +24 -55
  65. package/v2Components/TemplatePreview/index.js +32 -47
  66. package/v2Components/TemplatePreview/messages.js +0 -4
  67. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
  68. package/v2Containers/BeeEditor/index.js +90 -172
  69. package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +3 -4
  70. package/v2Containers/CreativesContainer/SlideBoxContent.js +52 -128
  71. package/v2Containers/CreativesContainer/SlideBoxFooter.js +13 -163
  72. package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -2
  73. package/v2Containers/CreativesContainer/constants.js +0 -1
  74. package/v2Containers/CreativesContainer/index.js +46 -240
  75. package/v2Containers/CreativesContainer/messages.js +0 -8
  76. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +2 -11
  77. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +50 -38
  78. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -106
  79. package/v2Containers/Email/actions.js +0 -7
  80. package/v2Containers/Email/constants.js +1 -5
  81. package/v2Containers/Email/index.js +30 -239
  82. package/v2Containers/Email/messages.js +0 -32
  83. package/v2Containers/Email/reducer.js +1 -12
  84. package/v2Containers/Email/sagas.js +7 -61
  85. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
  86. package/v2Containers/Email/tests/reducer.test.js +0 -46
  87. package/v2Containers/Email/tests/sagas.test.js +29 -320
  88. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +21 -211
  89. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +74 -40
  90. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +67 -2
  91. package/v2Containers/EmailWrapper/constants.js +0 -2
  92. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +77 -629
  93. package/v2Containers/EmailWrapper/index.js +23 -103
  94. package/v2Containers/EmailWrapper/messages.js +1 -65
  95. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
  96. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +77 -594
  97. package/v2Containers/InApp/actions.js +0 -7
  98. package/v2Containers/InApp/constants.js +4 -20
  99. package/v2Containers/InApp/index.js +360 -804
  100. package/v2Containers/InApp/index.scss +3 -4
  101. package/v2Containers/InApp/messages.js +3 -7
  102. package/v2Containers/InApp/reducer.js +3 -21
  103. package/v2Containers/InApp/sagas.js +9 -29
  104. package/v2Containers/InApp/selectors.js +5 -25
  105. package/v2Containers/InApp/tests/index.test.js +71 -152
  106. package/v2Containers/InApp/tests/reducer.test.js +0 -34
  107. package/v2Containers/InApp/tests/sagas.test.js +9 -61
  108. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +12 -39
  109. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +6 -10
  110. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +75 -102
  111. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +54 -81
  112. package/v2Containers/MobilePushNew/index.js +2 -3
  113. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +178 -262
  114. package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +12 -16
  115. package/v2Containers/SmsTrai/Edit/index.js +1 -2
  116. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +111 -468
  117. package/v2Containers/TagList/index.js +19 -62
  118. package/v2Containers/Templates/_templates.scss +1 -60
  119. package/v2Containers/Templates/index.js +4 -89
  120. package/v2Containers/Templates/messages.js +0 -4
  121. package/v2Containers/WebPush/Create/messages.js +8 -0
  122. package/v2Containers/WebPush/Create/preview/PreviewControls.js +2 -2
  123. package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +3 -1
  124. package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +5 -1
  125. package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +5 -1
  126. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +5 -1
  127. package/v2Containers/WebPush/Create/preview/preview.scss +7 -0
  128. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +734 -1306
  129. package/v2Components/ErrorInfoNote/constants.js +0 -1
  130. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -874
  131. package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +0 -6
  132. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -255
  133. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -364
  134. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
  135. package/v2Components/HtmlEditor/utils/validationConstants.js +0 -40
  136. package/v2Containers/BeePopupEditor/_beePopupEditor.scss +0 -14
  137. package/v2Containers/BeePopupEditor/constants.js +0 -10
  138. package/v2Containers/BeePopupEditor/index.js +0 -194
  139. package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
  140. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1285
  141. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -1880
  142. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +0 -520
  143. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +0 -643
  144. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +0 -376
  145. package/v2Containers/InApp/__tests__/sagas.test.js +0 -363
  146. package/v2Containers/InApp/tests/selectors.test.js +0 -612
  147. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +0 -151
  148. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
  149. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -23
  150. package/v2Containers/InAppWrapper/constants.js +0 -16
  151. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +0 -473
  152. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +0 -198
  153. package/v2Containers/InAppWrapper/index.js +0 -148
  154. package/v2Containers/InAppWrapper/messages.js +0 -49
  155. package/v2Containers/InappAdvance/index.js +0 -1099
  156. package/v2Containers/InappAdvance/index.scss +0 -10
  157. 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((issue) => issue.source === VALIDATION_SOURCES.LIQUID
47
- || issue.rule?.includes('liquid')
48
- || issue.message?.toLowerCase().includes('liquid'));
49
-
50
- const standardErrors = allIssues.filter((issue) => issue.source !== VALIDATION_SOURCES.LIQUID
51
- && !issue.rule?.includes('liquid')
52
- && !issue.message?.toLowerCase().includes('liquid'));
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) => errors.map((error) => {
56
- let {message} = error;
57
-
58
- // Add line/column info if available
59
- if (error.line) {
60
- message += ` Line ${error.line}`;
61
- if (error.column) {
62
- message += `, Char ${error.column}`;
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
- // Add rule info if available
68
- if (error.rule) {
69
- message += ` • ${error.rule}`;
70
- }
62
+ // Add rule info if available
63
+ if (error.rule) {
64
+ message += ` • ${error.rule}`;
65
+ }
71
66
 
72
- return message;
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
- // Safety check: ensure allIssues is an array
138
- if (!Array.isArray(allIssues)) {
139
- console.warn('[validationAdapter] validation.getAllIssues() did not return an array:', allIssues);
140
- return { totalErrors: 0, totalWarnings: 0, hasLiquidErrors: false };
141
- }
142
-
143
- const errors = allIssues.filter((issue) => issue.severity === 'error');
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
- // Check for INAPP channel structure (versions.base.content.ANDROID/IOS) or MOBILE_PUSH structure (versions.base.ANDROID/IOS)
30
- const { channel, templateData } = props;
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: isAndroid ? androidPreviewContent : iosPreviewContent,
85
- templateLayoutType: isAndroid ? androidContent?.bodyType : iosContent?.bodyType,
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
- // Normalize device to 'android' or 'ios' for comparison
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 (
@@ -1,16 +1,5 @@
1
1
  @import '~@capillarytech/cap-ui-library/styles/_variables.scss';
2
2
 
3
- .shell-v2 {
4
- &.align-center {
5
- .preview-image-container {
6
- position: relative;
7
- display: inline-block;
8
- width: 100%;
9
- height: 100%;
10
- }
11
- }
12
- }
13
-
14
3
  .shell-v2 {
15
4
  position: relative;
16
5
  -webkit-transform: translate(-50%);
@@ -27,11 +16,10 @@
27
16
  &.mobilepush
28
17
 
29
18
  .inapp-message-container-POPUP-ANDROID {
30
- background-color: $CAP_WHITE;
31
19
  position: absolute;
32
- top: 30%;
20
+ top: 20%;
33
21
  display: flex;
34
- width: 14.286rem;
22
+ width: 200px;
35
23
  left: 28%;
36
24
 
37
25
  .inapp-title-POPUP-ANDROID {
@@ -71,10 +59,10 @@
71
59
  .inapp-message-container-HEADER-ANDROID {
72
60
  position: absolute;
73
61
  display: flex;
74
- width: 17.571rem;
75
- left: 18%;
76
- top: 4.071rem;
77
- background-color: $CAP_WHITE;
62
+ // bottom: 19.4rem;
63
+ width: 200px;
64
+ left: 28%;
65
+ top: 20px;
78
66
 
79
67
  .inapp-title-HEADER-ANDROID {
80
68
  left: 34%;
@@ -141,24 +129,22 @@
141
129
 
142
130
 
143
131
  .inapp-message-container-FOOTER-ANDROID {
144
- background-color: $CAP_WHITE;
145
132
  position: absolute;
146
133
  display: flex;
147
134
  justify-content: center;
148
- bottom: 2.5%;
149
- width: 16.571rem;
150
- left: 21%;
151
- background-color: $CAP_WHITE;
135
+ bottom: 1.5%;
136
+ width: 200px;
137
+ left: 28%;
152
138
 
153
139
  .inapp-title-FOOTER-ANDROID {
154
- width: 6.429rem;
140
+ width: 90px;
155
141
  height: 12px;
156
142
  text-align: left;
157
143
  left: 34%;
158
144
  justify-content: center;
159
145
  position: relative;
160
146
  right: 33%;
161
- bottom: -1.429rem;
147
+ bottom: -22px;
162
148
  font-size: 10px;
163
149
  text-overflow: ellipsis;
164
150
  overflow: hidden;
@@ -215,12 +201,10 @@
215
201
  }
216
202
 
217
203
  .inapp-message-container-FULLSCREEN-ANDROID {
218
- background-color: $CAP_WHITE;
219
204
  position: absolute;
220
205
  top: 10%;
221
206
  display: flex;
222
- left: 20%;
223
- width: 16.643rem;
207
+ left: 29%;
224
208
  .inapp-title-FULLSCREEN-ANDROID {
225
209
  text-overflow: ellipsis;
226
210
  overflow: hidden;
@@ -254,11 +238,10 @@
254
238
  }
255
239
 
256
240
  .inapp-message-container-POPUP-iOS {
257
- background-color: $CAP_WHITE;
258
241
  position: absolute;
259
- top: 30%;
242
+ top: 20%;
260
243
  display: flex;
261
- width: 14.286rem;
244
+ width: 200px;
262
245
  left: 28%;
263
246
 
264
247
  .inapp-title-POPUP-iOS {
@@ -295,19 +278,18 @@
295
278
  }
296
279
 
297
280
  .inapp-message-container-HEADER-iOS {
298
- background-color: $CAP_WHITE;
299
281
  position: absolute;
300
282
  display: flex;
301
- width: 16.571rem;
302
- left: 20%;
303
- top: 10%;
283
+ width: 200px;
284
+ left: 28%;
285
+ top: 3%;
304
286
 
305
287
  .inapp-title-HEADER-iOS {
306
288
  left: 34%;
307
289
  top: 15%;
308
290
  position: relative;
309
291
  font-size: 10px;
310
- width: 6.429rem;
292
+ width: 90px;
311
293
  height: 12px;
312
294
  text-overflow: ellipsis;
313
295
  overflow: hidden;
@@ -318,7 +300,7 @@
318
300
 
319
301
  .without-image-title-HEADER-ios {
320
302
  left: 26%;
321
- top: 1.286rem;
303
+ top: 18px;
322
304
  text-align: center;
323
305
  }
324
306
 
@@ -348,7 +330,7 @@
348
330
  .without-image-content-HEADER-ios {
349
331
  width: 92%;
350
332
  left: 6%;
351
- top: 1.5rem;
333
+ top: 21px;
352
334
  }
353
335
 
354
336
  .inapp-button-HEADER-iOS {
@@ -365,14 +347,12 @@
365
347
  }
366
348
 
367
349
  .inapp-message-container-FOOTER-iOS {
368
- background-color: $CAP_WHITE;
369
350
  position: absolute;
370
351
  display: flex;
371
352
  justify-content: center;
372
- width: 16.571rem;
373
- left: 20%;
374
- top: 42%;
375
- bottom: 3.5%;
353
+ width: 200px;
354
+ left: 28%;
355
+ top: 75%;
376
356
 
377
357
  .inapp-title-FOOTER-iOS {
378
358
  width: 90px;
@@ -440,12 +420,10 @@
440
420
  }
441
421
 
442
422
  .inapp-message-container-FULLSCREEN-iOS {
443
- background-color: $CAP_WHITE;
444
423
  position: absolute;
445
424
  top: 10%;
446
425
  display: flex;
447
- left: 20%;
448
- width: 16.643rem;
426
+ left: 29%;
449
427
  .inapp-title-FULLSCREEN-iOS {
450
428
  text-overflow: ellipsis;
451
429
  overflow: hidden;
@@ -477,15 +455,6 @@
477
455
  bottom: -1%;
478
456
  }
479
457
  }
480
-
481
- .inapp-message-container-MODAL-ANDROID, .inapp-message-container-MODAL-iOS {
482
- background-color: $CAP_WHITE;
483
- position: absolute;
484
- top: 30%;
485
- display: flex;
486
- width: 14.286rem;
487
- left: 28%;
488
- }
489
458
  }
490
459
 
491
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 inAppMobileDeviceAndroid from '../../assets/Android.png';
41
- import inAppMobileDeviceIos from '../../assets/iOS.png';
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, isBeeFreeTemplate } = content || {};
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
- return inAppMobileDeviceAndroid;
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
- return inAppMobileDeviceIos;
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
 
@@ -1354,34 +1374,7 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
1354
1374
  </div>
1355
1375
  )}
1356
1376
  {channel?.toUpperCase() === INAPP && (
1357
- isBeeFreeTemplate ? (
1358
- <div className="shell-v2 align-center">
1359
- <CapRow className="preview-image-container">
1360
- <CapImage
1361
- className="preview-image"
1362
- src={this.props.device === ANDROID ? inAppMobileDeviceAndroid : inAppMobileDeviceIos}
1363
- alt={formatMessage(messages.previewGenerated)}
1364
- />
1365
- <iframe
1366
- srcDoc={inAppPreviewContent?.value}
1367
- title={formatMessage(messages.inappPreview)}
1368
- style={{
1369
- position: 'absolute',
1370
- top: '3rem',
1371
- left: '5rem',
1372
- width: '60%',
1373
- height: '89%',
1374
- zIndex: 1,
1375
- pointerEvents: 'none',
1376
- backgroundColor: 'white',
1377
- borderRadius: `${CAP_SPACE_08}`,
1378
- }}
1379
- frameBorder="0"
1380
- />
1381
- </CapRow>
1382
- </div>
1383
- ): (
1384
- <div className="shell-v2 align-center">
1377
+ <div className="shell-v2 align-center">
1385
1378
  <CapImage
1386
1379
  className="preview-image"
1387
1380
  src={getPreviewImage()}
@@ -1389,15 +1382,9 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
1389
1382
  />
1390
1383
  <div className="preview-image">
1391
1384
  <div
1392
- className={`inapp-message-container-${templateLayoutType}-${device} inapp`}
1385
+ className={`inapp-message-container-${templateLayoutType}-${device} sms`}
1393
1386
  >
1394
- {isHTMLContent ? (
1395
- <div
1396
- className="inapp-html-content"
1397
- dangerouslySetInnerHTML={{ __html: templateMsg }}
1398
- />
1399
- ) : (
1400
- <div className="preview-inapp-screen">
1387
+ <div className="preview-inapp-screen">
1401
1388
  {
1402
1389
  <CapLabel
1403
1390
  type="label15"
@@ -1462,11 +1449,9 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
1462
1449
  </CapButton>
1463
1450
  )}
1464
1451
  </div>
1465
- )}
1466
1452
  </div>
1467
1453
  </div>
1468
1454
  </div>
1469
- )
1470
1455
  )}
1471
1456
  </CapRow>
1472
1457
  </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
  });
@@ -66,7 +66,6 @@
66
66
  flex: 1;
67
67
  background-color: #f0f2f5;
68
68
  padding: $CAP_SPACE_08 $CAP_SPACE_24;
69
- overflow-y: auto;
70
69
  }
71
70
 
72
71
  .panel-section {