@capillarytech/creatives-library 8.0.254 → 8.0.255-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 (143) hide show
  1. package/assets/Android.png +0 -0
  2. package/assets/iOS.png +0 -0
  3. package/constants/unified.js +2 -1
  4. package/initialReducer.js +2 -0
  5. package/package.json +1 -1
  6. package/services/api.js +10 -0
  7. package/services/tests/api.test.js +34 -0
  8. package/utils/common.js +5 -0
  9. package/utils/commonUtils.js +28 -5
  10. package/utils/tests/commonUtil.test.js +224 -0
  11. package/utils/transformTemplateConfig.js +0 -10
  12. package/v2Components/CapDeviceContent/index.js +61 -56
  13. package/v2Components/CapTagList/index.js +6 -1
  14. package/v2Components/CapTagListWithInput/index.js +5 -1
  15. package/v2Components/CapTagListWithInput/messages.js +1 -1
  16. package/v2Components/CapWhatsappCTA/tests/index.test.js +5 -0
  17. package/v2Components/ErrorInfoNote/constants.js +1 -0
  18. package/v2Components/ErrorInfoNote/index.js +457 -72
  19. package/v2Components/ErrorInfoNote/messages.js +36 -6
  20. package/v2Components/ErrorInfoNote/style.scss +282 -6
  21. package/v2Components/FormBuilder/tests/index.test.js +13 -4
  22. package/v2Components/HtmlEditor/HTMLEditor.js +547 -94
  23. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +874 -0
  24. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +1358 -133
  25. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +27 -16
  26. package/v2Components/HtmlEditor/_htmlEditor.scss +108 -45
  27. package/v2Components/HtmlEditor/_index.lazy.scss +0 -1
  28. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +22 -101
  29. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +149 -140
  30. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +2 -1
  31. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  32. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +9 -0
  33. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +1 -1
  34. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +22 -0
  35. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +4 -7
  36. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +35 -45
  37. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +1 -3
  38. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  39. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +7 -6
  40. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +3 -6
  41. package/v2Components/HtmlEditor/components/PreviewPane/index.js +24 -34
  42. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  43. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +49 -31
  44. package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +50 -34
  45. package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +6 -0
  46. package/v2Components/HtmlEditor/components/ValidationPanel/index.js +70 -41
  47. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +254 -0
  48. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +364 -0
  49. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +51 -0
  50. package/v2Components/HtmlEditor/constants.js +42 -20
  51. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +373 -16
  52. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.apiErrors.test.js +794 -0
  53. package/v2Components/HtmlEditor/hooks/useEditorContent.js +5 -2
  54. package/v2Components/HtmlEditor/hooks/useInAppContent.js +88 -146
  55. package/v2Components/HtmlEditor/hooks/useValidation.js +189 -53
  56. package/v2Components/HtmlEditor/index.js +1 -1
  57. package/v2Components/HtmlEditor/messages.js +95 -85
  58. package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +94 -45
  59. package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +134 -0
  60. package/v2Components/HtmlEditor/utils/contentSanitizer.js +40 -41
  61. package/v2Components/HtmlEditor/utils/htmlValidator.js +71 -72
  62. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +134 -102
  63. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +23 -25
  64. package/v2Components/HtmlEditor/utils/validationAdapter.js +66 -41
  65. package/v2Components/HtmlEditor/utils/validationConstants.js +40 -0
  66. package/v2Components/MobilePushPreviewV2/index.js +32 -7
  67. package/v2Components/TemplatePreview/_templatePreview.scss +55 -24
  68. package/v2Components/TemplatePreview/index.js +47 -32
  69. package/v2Components/TemplatePreview/messages.js +4 -0
  70. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +1 -0
  71. package/v2Containers/BeeEditor/index.js +172 -90
  72. package/v2Containers/BeePopupEditor/_beePopupEditor.scss +14 -0
  73. package/v2Containers/BeePopupEditor/constants.js +10 -0
  74. package/v2Containers/BeePopupEditor/index.js +194 -0
  75. package/v2Containers/BeePopupEditor/tests/index.test.js +627 -0
  76. package/v2Containers/CreativesContainer/SlideBoxContent.js +128 -51
  77. package/v2Containers/CreativesContainer/SlideBoxFooter.js +163 -13
  78. package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -1
  79. package/v2Containers/CreativesContainer/constants.js +1 -0
  80. package/v2Containers/CreativesContainer/index.js +239 -46
  81. package/v2Containers/CreativesContainer/messages.js +8 -0
  82. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +11 -2
  83. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +38 -50
  84. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +106 -0
  85. package/v2Containers/Email/actions.js +7 -0
  86. package/v2Containers/Email/constants.js +5 -1
  87. package/v2Containers/Email/index.js +234 -29
  88. package/v2Containers/Email/messages.js +32 -0
  89. package/v2Containers/Email/reducer.js +12 -1
  90. package/v2Containers/Email/sagas.js +61 -7
  91. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +2 -0
  92. package/v2Containers/Email/tests/reducer.test.js +46 -0
  93. package/v2Containers/Email/tests/sagas.test.js +320 -29
  94. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +1285 -0
  95. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +207 -19
  96. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +40 -74
  97. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +1870 -0
  98. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +520 -0
  99. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +2 -67
  100. package/v2Containers/EmailWrapper/constants.js +2 -0
  101. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +629 -77
  102. package/v2Containers/EmailWrapper/index.js +103 -23
  103. package/v2Containers/EmailWrapper/messages.js +61 -1
  104. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +643 -0
  105. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +594 -77
  106. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +376 -0
  107. package/v2Containers/InApp/__tests__/sagas.test.js +363 -0
  108. package/v2Containers/InApp/actions.js +7 -0
  109. package/v2Containers/InApp/constants.js +20 -4
  110. package/v2Containers/InApp/index.js +802 -359
  111. package/v2Containers/InApp/index.scss +4 -3
  112. package/v2Containers/InApp/messages.js +7 -3
  113. package/v2Containers/InApp/reducer.js +21 -3
  114. package/v2Containers/InApp/sagas.js +29 -9
  115. package/v2Containers/InApp/selectors.js +25 -5
  116. package/v2Containers/InApp/tests/index.test.js +154 -50
  117. package/v2Containers/InApp/tests/reducer.test.js +34 -0
  118. package/v2Containers/InApp/tests/sagas.test.js +61 -9
  119. package/v2Containers/InApp/tests/selectors.test.js +612 -0
  120. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +151 -0
  121. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +267 -0
  122. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +23 -0
  123. package/v2Containers/InAppWrapper/constants.js +16 -0
  124. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +473 -0
  125. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +198 -0
  126. package/v2Containers/InAppWrapper/index.js +148 -0
  127. package/v2Containers/InAppWrapper/messages.js +49 -0
  128. package/v2Containers/InappAdvance/index.js +1099 -0
  129. package/v2Containers/InappAdvance/index.scss +10 -0
  130. package/v2Containers/InappAdvance/tests/index.test.js +448 -0
  131. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +3 -0
  132. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -0
  133. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +2 -0
  134. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +9 -0
  135. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +12 -0
  136. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -0
  137. package/v2Containers/TagList/index.js +62 -19
  138. package/v2Containers/Templates/_templates.scss +60 -1
  139. package/v2Containers/Templates/index.js +89 -4
  140. package/v2Containers/Templates/messages.js +4 -0
  141. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +34 -0
  142. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +0 -152
  143. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +0 -214
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React, { useRef, useCallback } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { FormattedMessage } from 'react-intl';
4
4
  import styled from 'styled-components';
@@ -11,25 +11,37 @@ import CapSpin from '@capillarytech/cap-ui-library/CapSpin';
11
11
  import CapButton from '@capillarytech/cap-ui-library/CapButton';
12
12
  import CapError from '@capillarytech/cap-ui-library/CapError';
13
13
  import ComponentWithLabelHOC from '@capillarytech/cap-ui-library/assets/HOCs/ComponentWithLabelHOC';
14
- import Email from '../../Email';
14
+ import { CAP_COLOR_06, CAP_WHITE } from '@capillarytech/cap-ui-library/styled/variables';
15
+ import { EmailWithoutSaga } from '../../Email';
15
16
  import CmsTemplatesComponent from '../../../v2Components/CmsTemplatesComponent';
17
+ import EmailHTMLEditor from './EmailHTMLEditor';
18
+ import TestAndPreviewSlidebox from '../../../v2Components/TestAndPreviewSlidebox';
19
+ import { EMAIL } from '../../CreativesContainer/constants';
16
20
  import messages from '../messages';
17
21
  import { EMAIL_CREATE_MODES, STEPS } from '../constants';
22
+ import { hasSupportCKEditor } from '../../../utils/common';
18
23
 
19
24
  const CapRadioCardWithLabel = ComponentWithLabelHOC(CapRadioCard);
20
25
 
21
26
  const CardContainer = styled.div`
22
27
  margin-top: 16px;
23
- .ant-radio-group{
24
- .ant-radio-button-wrapper{
25
- &:first-child{
26
- margin-left: unset;
28
+
29
+ .ant-radio-group.cap-radioCard-v2 {
30
+ .ant-radio-button-wrapper {
31
+ &.ant-radio-button-wrapper-checked {
32
+ .icon-container {
33
+ background-color: ${CAP_COLOR_06};
34
+ .anticon,
35
+ .cap-icon {
36
+ color: ${CAP_WHITE};
37
+ }
38
+ }
27
39
  }
28
40
  }
29
41
  }
30
42
  `;
31
43
 
32
- // Mode selection component that handles the creation mode selection UI
44
+ // Mode selection component
33
45
  const ModeSelectionUI = ({
34
46
  isFullMode,
35
47
  templateName,
@@ -51,7 +63,7 @@ const ModeSelectionUI = ({
51
63
  value={templateName}
52
64
  labelPosition="top"
53
65
  size="default"
54
- style={{ width: '68%'}}
66
+ style={{ width: '68%' }}
55
67
  />
56
68
  )}
57
69
  <CardContainer>
@@ -98,25 +110,36 @@ ModeSelectionUI.propTypes = {
98
110
  uploadButtonLabel: PropTypes.node.isRequired,
99
111
  };
100
112
 
101
- // Content creation component that handles the email or template selection UI
113
+ // Content creation component
102
114
  const ContentCreationUI = ({
103
115
  isShowEmailCreate,
104
116
  emailProps,
105
117
  cmsTemplatesProps,
106
- }) => (
107
- <>
108
- {isShowEmailCreate ? (
109
- <Email {...emailProps} />
110
- ) : (
111
- <CmsTemplatesComponent {...cmsTemplatesProps} />
112
- )}
113
- </>
114
- );
118
+ isHTMLEditorMode,
119
+ htmlEditorProps,
120
+ }) => {
121
+
122
+ return (
123
+ <>
124
+ {isShowEmailCreate ? (
125
+ isHTMLEditorMode ? (
126
+ <EmailHTMLEditor {...htmlEditorProps} />
127
+ ) : (
128
+ <EmailWithoutSaga {...emailProps} />
129
+ )
130
+ ) : (
131
+ <CmsTemplatesComponent {...cmsTemplatesProps} />
132
+ )}
133
+ </>
134
+ );
135
+ };
115
136
 
116
137
  ContentCreationUI.propTypes = {
117
138
  isShowEmailCreate: PropTypes.bool.isRequired,
118
139
  emailProps: PropTypes.object.isRequired,
119
140
  cmsTemplatesProps: PropTypes.object.isRequired,
141
+ isHTMLEditorMode: PropTypes.bool,
142
+ htmlEditorProps: PropTypes.object,
120
143
  };
121
144
 
122
145
  // Main EmailWrapper presentational component
@@ -137,9 +160,136 @@ const EmailWrapperView = ({
137
160
  isShowEmailCreate,
138
161
  emailProps,
139
162
  cmsTemplatesProps,
163
+ metaEntities,
164
+ loadingTags,
165
+ injectedTags,
166
+ globalActions,
167
+ supportedTags,
168
+ getDefaultTags,
169
+ location,
170
+ currentOrgDetails,
171
+ forwardedTags,
172
+ selectedOfferDetails,
173
+ eventContextTags,
174
+ getFormdata,
175
+ isGetFormData,
176
+ getLiquidTags,
177
+ showLiquidErrorInFooter,
178
+ onValidationFail,
179
+ emailActions,
180
+ Email,
181
+ templateData: templateDataProp,
182
+ params,
183
+ fetchingLiquidTags,
184
+ createTemplateInProgress,
185
+ fetchingCmsData,
186
+ setIsLoadingContent,
187
+ showTestAndPreviewSlidebox,
188
+ handleCloseTestAndPreview,
189
+ showTemplateName,
190
+ onHtmlEditorValidationStateChange,
191
+ moduleType,
140
192
  }) => {
193
+ const htmlEditorRef = useRef(null);
194
+ const supportCKEditor = hasSupportCKEditor();
195
+ const hasParamsIdForEditor = params?.id || location?.query?.id || location?.params?.id || location?.pathname?.includes('/edit/');
196
+ const isEditModeForEditor = hasParamsIdForEditor;
197
+ const isBEEFromProps = emailProps?.editor === 'BEE' && emailProps?.selectedEditorMode === null;
198
+ const isDragDropFromCreateMode = emailCreateMode === EMAIL_CREATE_MODES.DRAG_DROP;
199
+ const isExplicitlyBEEEditor = isBEEFromProps || isDragDropFromCreateMode;
200
+ let isHTMLEditorMode = false;
201
+
202
+ if (supportCKEditor) {
203
+ isHTMLEditorMode = false; // Legacy flow: use Email component
204
+ } else if (isEditModeForEditor) {
205
+ isHTMLEditorMode = !isExplicitlyBEEEditor;
206
+ } else {
207
+ if (isExplicitlyBEEEditor || isBEEFromProps || isDragDropFromCreateMode) {
208
+ isHTMLEditorMode = false;
209
+ } else {
210
+ isHTMLEditorMode = emailProps?.selectedEditorMode === EMAIL_CREATE_MODES.HTML_EDITOR ||
211
+ emailCreateMode === EMAIL_CREATE_MODES.HTML_EDITOR;
212
+ }
213
+ }
214
+
215
+ const isShowTemplateSelection = step === STEPS.MODE_SELECTION;
216
+
217
+ // Create onFormDataChange callback for template name updates (similar to Email component)
218
+ // This allows CreativesContainer to update the template name when user clicks "Edit name"
219
+ // When user edits the name in CreativesContainer header, it calls this callback
220
+ // which updates the template name in EmailWrapper, and then CreativesContainer
221
+ // will call showTemplateName again with the updated formData
222
+ const handleFormDataChange = useCallback((updatedFormData) => {
223
+ const newTemplateName = updatedFormData?.['template-name'] || templateName;
224
+ if (newTemplateName !== templateName && onTemplateNameChange) {
225
+ // Update template name in parent (useEmailWrapper hook)
226
+ onTemplateNameChange({ target: { value: newTemplateName } });
227
+ }
228
+ // Note: CreativesContainer will call showTemplateName again after this callback
229
+ // (it stores the callback in templateContainerDetails and calls it after state updates)
230
+ }, [templateName, onTemplateNameChange]);
231
+
232
+ const htmlEditorProps = isHTMLEditorMode ? {
233
+ // Location and params
234
+ location,
235
+ params,
236
+ // Tag-related props
237
+ getDefaultTags,
238
+ supportedTags,
239
+ metaEntities,
240
+ injectedTags,
241
+ globalActions,
242
+ loadingTags,
243
+ eventContextTags,
244
+ forwardedTags,
245
+ selectedOfferDetails,
246
+ currentOrgDetails,
247
+ // Email Redux state and actions
248
+ Email,
249
+ emailActions,
250
+ // Full mode props
251
+ isFullMode,
252
+ templateName,
253
+ isGetFormData,
254
+ getFormdata,
255
+ // Library mode props
256
+ templateData: templateDataProp,
257
+ // Uploaded content from zip file
258
+ EmailLayout,
259
+ // Liquid validation
260
+ getLiquidTags,
261
+ showLiquidErrorInFooter,
262
+ // Validation state callback
263
+ onHtmlEditorValidationStateChange,
264
+ onValidationFail,
265
+ // Template name
266
+ showTemplateName,
267
+ onFormDataChange: handleFormDataChange,
268
+ // Module type for unsubscribe tag validation
269
+ moduleType,
270
+ // Loading states
271
+ fetchingLiquidTags: fetchingLiquidTags || false,
272
+ createTemplateInProgress: createTemplateInProgress || false,
273
+ fetchingCmsData: fetchingCmsData || false,
274
+ // Parent loading control
275
+ setIsLoadingContent,
276
+ ref: htmlEditorRef,
277
+ } : {};
278
+
279
+ // Get formData for TestAndPreviewSlidebox when needed
280
+ const getFormDataForPreview = () => {
281
+ if (htmlEditorRef.current && htmlEditorRef.current.getFormDataForPreview) {
282
+ return htmlEditorRef.current.getFormDataForPreview();
283
+ }
284
+ return {};
285
+ };
141
286
 
142
- const isShowTemplateSelection = step === STEPS.MODE_SELECTION || (step === STEPS.TEMPLATE_SELECTION && emailCreateMode === EMAIL_CREATE_MODES.UPLOAD);
287
+ const getContentForPreview = () => {
288
+ if (htmlEditorRef.current && htmlEditorRef.current.getContentForPreview) {
289
+ return htmlEditorRef.current.getContentForPreview();
290
+ }
291
+ return '';
292
+ };
143
293
 
144
294
  return (
145
295
  <>
@@ -163,9 +313,22 @@ const EmailWrapperView = ({
163
313
  isShowEmailCreate={isShowEmailCreate}
164
314
  emailProps={emailProps}
165
315
  cmsTemplatesProps={cmsTemplatesProps}
316
+ isHTMLEditorMode={isHTMLEditorMode}
317
+ htmlEditorProps={htmlEditorProps}
166
318
  />
167
319
  )}
168
320
  </CapSpin>
321
+ {/* Render TestAndPreviewSlidebox for HTML Editor (similar to legacy Email component) */}
322
+ {isHTMLEditorMode && showTestAndPreviewSlidebox && (
323
+ <TestAndPreviewSlidebox
324
+ show={showTestAndPreviewSlidebox}
325
+ onClose={handleCloseTestAndPreview}
326
+ formData={getFormDataForPreview()}
327
+ content={getContentForPreview()}
328
+ currentChannel={EMAIL}
329
+ currentTab={1}
330
+ />
331
+ )}
169
332
  </>
170
333
  );
171
334
  };
@@ -175,6 +338,10 @@ EmailWrapperView.propTypes = {
175
338
  emailCreateMode: PropTypes.string,
176
339
  step: PropTypes.string,
177
340
  isFullMode: PropTypes.bool,
341
+ getFormdata: PropTypes.func,
342
+ isGetFormData: PropTypes.bool,
343
+ getLiquidTags: PropTypes.func,
344
+ showLiquidErrorInFooter: PropTypes.func,
178
345
  templateName: PropTypes.string,
179
346
  onTemplateNameChange: PropTypes.func.isRequired,
180
347
  isTemplateNameEmpty: PropTypes.bool,
@@ -187,6 +354,27 @@ EmailWrapperView.propTypes = {
187
354
  isShowEmailCreate: PropTypes.bool.isRequired,
188
355
  emailProps: PropTypes.object.isRequired,
189
356
  cmsTemplatesProps: PropTypes.object.isRequired,
357
+ metaEntities: PropTypes.object,
358
+ loadingTags: PropTypes.bool,
359
+ injectedTags: PropTypes.object,
360
+ globalActions: PropTypes.object,
361
+ supportedTags: PropTypes.array,
362
+ getDefaultTags: PropTypes.string,
363
+ location: PropTypes.object,
364
+ currentOrgDetails: PropTypes.object,
365
+ forwardedTags: PropTypes.object,
366
+ selectedOfferDetails: PropTypes.array,
367
+ eventContextTags: PropTypes.array,
368
+ emailActions: PropTypes.object,
369
+ Email: PropTypes.object,
370
+ templateData: PropTypes.object,
371
+ params: PropTypes.object,
372
+ fetchingLiquidTags: PropTypes.bool,
373
+ createTemplateInProgress: PropTypes.bool,
374
+ fetchingCmsData: PropTypes.bool,
375
+ setIsLoadingContent: PropTypes.func,
376
+ showTestAndPreviewSlidebox: PropTypes.bool,
377
+ handleCloseTestAndPreview: PropTypes.func,
190
378
  };
191
379
 
192
380
  export default EmailWrapperView;
@@ -24,24 +24,20 @@ const HTMLEditorTesting = () => {
24
24
  // Show/Hide editor
25
25
  show: () => {
26
26
  setIsVisible(true);
27
- console.log('✅ HTMLEditor test mode activated');
28
27
  },
29
28
 
30
29
  hide: () => {
31
30
  setIsVisible(false);
32
- console.log('✅ HTMLEditor test mode deactivated');
33
31
  },
34
32
 
35
33
  toggle: () => {
36
- setIsVisible(prev => !prev);
37
- console.log(`✅ HTMLEditor test mode ${!isVisible ? 'activated' : 'deactivated'}`);
34
+ setIsVisible((prev) => !prev);
38
35
  },
39
36
 
40
37
  // Variant control
41
38
  setVariant: (newVariant) => {
42
39
  if (['email', 'inapp'].includes(newVariant)) {
43
40
  setVariant(newVariant);
44
- console.log(`✅ Variant set to: ${newVariant}`);
45
41
  } else {
46
42
  console.error('❌ Invalid variant. Use: "email" or "inapp"');
47
43
  }
@@ -52,7 +48,6 @@ const HTMLEditorTesting = () => {
52
48
  const validLayouts = Object.values(LAYOUT_TYPES);
53
49
  if (validLayouts.includes(layout)) {
54
50
  setLayoutType(layout);
55
- console.log(`✅ Layout set to: ${layout}`);
56
51
  } else {
57
52
  console.error(`❌ Invalid layout. Use: ${validLayouts.join(', ')}`);
58
53
  }
@@ -61,58 +56,22 @@ const HTMLEditorTesting = () => {
61
56
  // Content control
62
57
  setContent: (newContent) => {
63
58
  setContent(newContent);
64
- console.log('✅ Content updated');
65
59
  },
66
60
 
67
61
  getContent: () => {
68
- console.log('Current content:', content);
69
62
  return content;
70
63
  },
71
64
 
72
65
  // Status
73
66
  status: () => {
74
- console.log('📊 HTMLEditor Test Status:');
75
- console.log(` Visible: ${isVisible}`);
76
- console.log(` Variant: ${variant}`);
77
- console.log(` Layout: ${layoutType}`);
78
- console.log(` Content size: ${content.length} chars`);
79
67
  },
80
68
 
81
69
  // Help
82
70
  help: () => {
83
- console.log(`
84
- 🚀 HTMLEditor Testing Console Commands:
85
-
86
- 📱 Basic Controls:
87
- htmlEditorTest.show() - Show the editor
88
- htmlEditorTest.hide() - Hide the editor
89
- htmlEditorTest.toggle() - Toggle editor visibility
90
-
91
- ⚙️ Configuration:
92
- htmlEditorTest.setVariant('email') - Set to email variant
93
- htmlEditorTest.setVariant('inapp') - Set to inapp variant
94
- htmlEditorTest.setLayout('POPUP') - Set layout (inapp only)
95
- - Valid: POPUP, HEADER, FOOTER, FULLSCREEN
96
-
97
- 📝 Content:
98
- htmlEditorTest.setContent('<h1>Test</h1>') - Set editor content
99
- htmlEditorTest.getContent() - Get current content
100
-
101
- 📊 Status:
102
- htmlEditorTest.status() - Show current status
103
- htmlEditorTest.help() - Show this help
104
-
105
- 💡 Example Usage:
106
- htmlEditorTest.show()
107
- htmlEditorTest.setVariant('inapp')
108
- htmlEditorTest.setLayout('HEADER') // Top banner
109
- htmlEditorTest.setLayout('FOOTER') // Bottom banner
110
- `);
111
- }
71
+ },
112
72
  };
113
73
 
114
74
  // Show help on first load
115
- console.log('🚀 HTMLEditor Testing Ready! Type htmlEditorTest.help() for commands');
116
75
 
117
76
  // Cleanup on unmount
118
77
  return () => {
@@ -128,32 +87,40 @@ const HTMLEditorTesting = () => {
128
87
  }
129
88
 
130
89
  return (
131
- <div style={{
132
- position: 'fixed',
133
- top: 0,
134
- left: 0,
135
- right: 0,
136
- bottom: 0,
137
- backgroundColor: 'rgba(0, 0, 0, 0.8)',
138
- zIndex: 9999,
139
- display: 'flex',
140
- flexDirection: 'column',
141
- padding: '20px'
142
- }}>
143
- {/* Header */}
144
- <div style={{
145
- backgroundColor: '#fff',
146
- padding: '10px 20px',
147
- borderRadius: '8px 8px 0 0',
90
+ <div
91
+ style={{
92
+ position: 'fixed',
93
+ top: 0,
94
+ left: 0,
95
+ right: 0,
96
+ bottom: 0,
97
+ backgroundColor: 'rgba(0, 0, 0, 0.8)',
98
+ zIndex: 9999,
148
99
  display: 'flex',
149
- justifyContent: 'space-between',
150
- alignItems: 'center',
151
- borderBottom: '1px solid #ddd'
100
+ flexDirection: 'column',
101
+ padding: '20px',
152
102
  }}>
103
+ {/* Header */}
104
+ <div
105
+ style={{
106
+ backgroundColor: '#fff',
107
+ padding: '10px 20px',
108
+ borderRadius: '8px 8px 0 0',
109
+ display: 'flex',
110
+ justifyContent: 'space-between',
111
+ alignItems: 'center',
112
+ borderBottom: '1px solid #ddd',
113
+ }}>
153
114
  <div>
154
115
  <strong>HTMLEditor Testing Mode</strong>
155
116
  <span style={{ marginLeft: '20px', color: '#666' }}>
156
- Variant: {variant} | Layout: {layoutType}
117
+ Variant:
118
+ {' '}
119
+ {variant}
120
+ {' '}
121
+ | Layout:
122
+ {' '}
123
+ {layoutType}
157
124
  </span>
158
125
  </div>
159
126
  <button
@@ -164,7 +131,7 @@ const HTMLEditorTesting = () => {
164
131
  border: 'none',
165
132
  padding: '5px 15px',
166
133
  borderRadius: '4px',
167
- cursor: 'pointer'
134
+ cursor: 'pointer',
168
135
  }}
169
136
  >
170
137
  Close
@@ -172,12 +139,13 @@ const HTMLEditorTesting = () => {
172
139
  </div>
173
140
 
174
141
  {/* Editor Container */}
175
- <div style={{
176
- flex: 1,
177
- backgroundColor: '#fff',
178
- borderRadius: '0 0 8px 8px',
179
- overflow: 'hidden'
180
- }}>
142
+ <div
143
+ style={{
144
+ flex: 1,
145
+ backgroundColor: '#fff',
146
+ borderRadius: '0 0 8px 8px',
147
+ overflow: 'hidden',
148
+ }}>
181
149
  <IntlProvider locale="en" messages={{}}>
182
150
  <HTMLEditor
183
151
  variant={variant}
@@ -185,10 +153,8 @@ const HTMLEditorTesting = () => {
185
153
  initialContent={content}
186
154
  onContentChange={(newContent) => {
187
155
  setContent(newContent);
188
- console.log('📝 Content changed:', newContent.substring(0, 100) + '...');
189
156
  }}
190
- onSave={(savedContent) => {
191
- console.log('💾 Content saved:', savedContent);
157
+ onSave={() => {
192
158
  }}
193
159
  />
194
160
  </IntlProvider>