@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.
Files changed (133) 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 -18
  8. package/utils/common.js +0 -5
  9. package/utils/commonUtils.js +5 -28
  10. package/utils/tests/commonUtil.test.js +0 -224
  11. package/utils/transformTemplateConfig.js +10 -0
  12. package/v2Components/CapDeviceContent/index.js +56 -61
  13. package/v2Components/CapTagList/index.js +1 -6
  14. package/v2Components/CapTagListWithInput/index.js +1 -5
  15. package/v2Components/CapTagListWithInput/messages.js +1 -1
  16. package/v2Components/CapWhatsappCTA/tests/index.test.js +0 -5
  17. package/v2Components/ErrorInfoNote/index.js +72 -447
  18. package/v2Components/ErrorInfoNote/messages.js +0 -22
  19. package/v2Components/ErrorInfoNote/style.scss +4 -280
  20. package/v2Components/FormBuilder/tests/index.test.js +4 -13
  21. package/v2Components/HtmlEditor/HTMLEditor.js +94 -642
  22. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1135
  23. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +16 -27
  24. package/v2Components/HtmlEditor/_htmlEditor.scss +45 -108
  25. package/v2Components/HtmlEditor/_index.lazy.scss +1 -1
  26. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +101 -13
  27. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +139 -148
  28. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
  29. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  30. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +0 -9
  31. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +1 -1
  32. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -22
  33. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +7 -4
  34. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +45 -35
  35. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +3 -1
  36. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  37. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +6 -7
  38. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +6 -3
  39. package/v2Components/HtmlEditor/components/PreviewPane/index.js +13 -11
  40. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  41. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +152 -0
  42. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -49
  43. package/v2Components/HtmlEditor/constants.js +20 -29
  44. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
  45. package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
  46. package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
  47. package/v2Components/HtmlEditor/hooks/useValidation.js +45 -150
  48. package/v2Components/HtmlEditor/index.js +1 -1
  49. package/v2Components/HtmlEditor/messages.js +85 -95
  50. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +102 -134
  51. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
  52. package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -66
  53. package/v2Components/MobilePushPreviewV2/index.js +7 -32
  54. package/v2Components/TemplatePreview/_templatePreview.scss +24 -44
  55. package/v2Components/TemplatePreview/index.js +32 -47
  56. package/v2Components/TemplatePreview/messages.js +0 -4
  57. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
  58. package/v2Components/TestAndPreviewSlidebox/index.js +25 -31
  59. package/v2Containers/BeeEditor/index.js +90 -172
  60. package/v2Containers/CreativesContainer/SlideBoxContent.js +51 -128
  61. package/v2Containers/CreativesContainer/SlideBoxFooter.js +12 -113
  62. package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -2
  63. package/v2Containers/CreativesContainer/constants.js +0 -1
  64. package/v2Containers/CreativesContainer/index.js +46 -238
  65. package/v2Containers/CreativesContainer/messages.js +0 -8
  66. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +2 -11
  67. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +50 -38
  68. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -91
  69. package/v2Containers/Email/actions.js +0 -7
  70. package/v2Containers/Email/constants.js +1 -5
  71. package/v2Containers/Email/index.js +30 -229
  72. package/v2Containers/Email/messages.js +0 -32
  73. package/v2Containers/Email/reducer.js +1 -12
  74. package/v2Containers/Email/sagas.js +7 -61
  75. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
  76. package/v2Containers/Email/tests/sagas.test.js +1 -1
  77. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +15 -210
  78. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +74 -40
  79. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +67 -2
  80. package/v2Containers/EmailWrapper/constants.js +0 -2
  81. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +77 -629
  82. package/v2Containers/EmailWrapper/index.js +23 -103
  83. package/v2Containers/EmailWrapper/messages.js +1 -61
  84. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
  85. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +77 -509
  86. package/v2Containers/InApp/actions.js +0 -7
  87. package/v2Containers/InApp/constants.js +4 -20
  88. package/v2Containers/InApp/index.js +357 -801
  89. package/v2Containers/InApp/index.scss +3 -4
  90. package/v2Containers/InApp/messages.js +3 -7
  91. package/v2Containers/InApp/reducer.js +3 -21
  92. package/v2Containers/InApp/sagas.js +9 -29
  93. package/v2Containers/InApp/selectors.js +5 -25
  94. package/v2Containers/InApp/tests/index.test.js +50 -154
  95. package/v2Containers/InApp/tests/reducer.test.js +0 -34
  96. package/v2Containers/InApp/tests/sagas.test.js +9 -61
  97. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +0 -3
  98. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +0 -2
  99. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +0 -2
  100. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +0 -9
  101. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +0 -12
  102. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +0 -4
  103. package/v2Containers/TagList/index.js +19 -62
  104. package/v2Containers/Templates/_templates.scss +1 -60
  105. package/v2Containers/Templates/index.js +4 -89
  106. package/v2Containers/Templates/messages.js +0 -4
  107. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +0 -35
  108. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -874
  109. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -254
  110. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -363
  111. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
  112. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.apiErrors.test.js +0 -630
  113. package/v2Containers/BeePopupEditor/constants.js +0 -10
  114. package/v2Containers/BeePopupEditor/index.js +0 -193
  115. package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
  116. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1317
  117. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -1605
  118. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +0 -520
  119. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +0 -643
  120. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +0 -376
  121. package/v2Containers/InApp/__tests__/sagas.test.js +0 -363
  122. package/v2Containers/InApp/tests/selectors.test.js +0 -612
  123. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +0 -162
  124. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
  125. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -9
  126. package/v2Containers/InAppWrapper/constants.js +0 -16
  127. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +0 -473
  128. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +0 -198
  129. package/v2Containers/InAppWrapper/index.js +0 -148
  130. package/v2Containers/InAppWrapper/messages.js +0 -49
  131. package/v2Containers/InappAdvance/index.js +0 -1099
  132. package/v2Containers/InappAdvance/index.scss +0 -10
  133. 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 (
@@ -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: 30%;
20
+ top: 20%;
22
21
  display: flex;
23
- width: 14.286rem;
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
- width: 17.571rem;
64
- left: 18%;
65
- top: 4.071rem;
66
- background-color: $CAP_WHITE;
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: 2.5%;
138
- width: 16.571rem;
139
- left: 21%;
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: 6.429rem;
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: -1.429rem;
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: 20%;
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: 30%;
242
+ top: 20%;
249
243
  display: flex;
250
- width: 14.286rem;
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: 16.571rem;
291
- left: 20%;
292
- top: 10%;
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: 6.429rem;
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: 1.286rem;
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: 1.5rem;
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: 16.571rem;
362
- left: 20%;
363
- top: 42%;
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: 20%;
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 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
 
@@ -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
- isBeeFreeTemplate ? (
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} inapp`}
1417
+ className={`inapp-message-container-${templateLayoutType}-${device} sms`}
1425
1418
  >
1426
- {isHTMLContent ? (
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
  });
@@ -67,7 +67,6 @@
67
67
  flex: 1;
68
68
  background-color: #f0f2f5;
69
69
  padding: $CAP_SPACE_08 $CAP_SPACE_24;
70
- overflow-y: auto;
71
70
  }
72
71
 
73
72
  .panel-section {