@capillarytech/creatives-library 8.0.87-alpha.21 → 8.0.87-alpha.23

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 (59) hide show
  1. package/containers/Templates/constants.js +6 -0
  2. package/containers/Templates/index.js +44 -24
  3. package/package.json +1 -1
  4. package/services/api.js +22 -12
  5. package/services/tests/api.test.js +5 -1
  6. package/utils/commonUtils.js +64 -10
  7. package/utils/tests/commonUtil.test.js +108 -3
  8. package/utils/tests/transformerUtils.test.js +2127 -0
  9. package/utils/transformerUtils.js +42 -96
  10. package/v2Components/CapImageUpload/index.js +13 -10
  11. package/v2Components/CapVideoUpload/index.js +12 -9
  12. package/v2Components/CapWhatsappCTA/messages.js +4 -0
  13. package/v2Components/CapWhatsappCarouselButton/constant.js +56 -0
  14. package/v2Components/CapWhatsappCarouselButton/index.js +446 -0
  15. package/v2Components/CapWhatsappCarouselButton/index.scss +39 -0
  16. package/v2Components/CapWhatsappCarouselButton/tests/index.test.js +237 -0
  17. package/v2Components/FormBuilder/constants.js +8 -0
  18. package/v2Components/FormBuilder/index.js +2 -2
  19. package/v2Components/TemplatePreview/_templatePreview.scss +20 -0
  20. package/v2Components/TemplatePreview/assets/images/empty_image_preview.svg +4 -0
  21. package/v2Components/TemplatePreview/assets/images/empty_video_preview.svg +4 -0
  22. package/v2Components/TemplatePreview/index.js +160 -105
  23. package/v2Components/TemplatePreview/tests/__snapshots__/index.test.js.snap +6 -6
  24. package/v2Containers/Cap/tests/saga.test.js +90 -1
  25. package/v2Containers/CreativesContainer/SlideBoxContent.js +0 -6
  26. package/v2Containers/CreativesContainer/constants.js +8 -1
  27. package/v2Containers/CreativesContainer/index.js +102 -9
  28. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +3 -0
  29. package/v2Containers/Email/index.js +0 -1
  30. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +192 -0
  31. package/v2Containers/EmailWrapper/constants.js +11 -1
  32. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +343 -0
  33. package/v2Containers/EmailWrapper/index.js +116 -300
  34. package/v2Containers/EmailWrapper/mockdata/mockdata.js +119 -0
  35. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
  36. package/v2Containers/EmailWrapper/tests/index.test.js +101 -0
  37. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +601 -0
  38. package/v2Containers/MobilePush/Edit/index.js +0 -1
  39. package/v2Containers/MobilepushWrapper/index.js +1 -2
  40. package/v2Containers/Sms/Create/index.js +0 -1
  41. package/v2Containers/SmsWrapper/index.js +0 -2
  42. package/v2Containers/Templates/_templates.scss +47 -0
  43. package/v2Containers/Templates/index.js +55 -5
  44. package/v2Containers/Templates/tests/__snapshots__/index.test.js.snap +177 -156
  45. package/v2Containers/TemplatesV2/index.js +2 -2
  46. package/v2Containers/Whatsapp/constants.js +87 -1
  47. package/v2Containers/Whatsapp/index.js +715 -190
  48. package/v2Containers/Whatsapp/index.scss +52 -1
  49. package/v2Containers/Whatsapp/messages.js +38 -2
  50. package/v2Containers/Whatsapp/styles.scss +5 -0
  51. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +27722 -90751
  52. package/v2Containers/Whatsapp/tests/__snapshots__/utils.test.js.snap +6 -0
  53. package/v2Containers/Whatsapp/tests/mockData.js +3 -7
  54. package/v2Containers/Whatsapp/tests/utils.test.js +178 -1
  55. package/v2Containers/Whatsapp/utils.js +52 -0
  56. package/v2Containers/Zalo/index.js +47 -15
  57. package/v2Containers/Zalo/index.scss +8 -0
  58. package/v2Containers/Zalo/messages.js +4 -0
  59. package/v2Containers/mockdata.js +2 -0
@@ -6,14 +6,9 @@
6
6
  import PropTypes from 'prop-types';
7
7
  import React from 'react';
8
8
  import { connect } from 'react-redux';
9
- import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
10
- import { GA } from '@capillarytech/cap-ui-utils';
9
+ import { injectIntl, intlShape } from 'react-intl';
11
10
  import { createStructuredSelector } from 'reselect';
12
11
  import { bindActionCreators } from 'redux';
13
- import _ from 'lodash';
14
- import styled from 'styled-components';
15
- import { CapRadioCard, CapNotification, CapInput, CapUploader, CapSpin, CapButton, CapError } from '@capillarytech/cap-ui-library';
16
- import ComponentWithLabelHOC from '@capillarytech/cap-ui-library/assets/HOCs/ComponentWithLabelHOC';
17
12
  import { UserIsAuthenticated } from '../../utils/authWrapper';
18
13
  import {
19
14
  selectEmailLayout,
@@ -23,304 +18,122 @@ import {
23
18
  selectCmsTemplatesLoader,
24
19
  } from '../Templates/selectors';
25
20
  import * as templatesActionsCreators from '../Templates/actions';
26
- import Email from '../Email';
27
- import CmsTemplatesComponent from '../../v2Components/CmsTemplatesComponent';
28
- import messages from './messages';
29
- import { CHANNEL_CREATE_TRACK_MAPPING } from '../App/constants';
30
- import { gtmPush } from '../../utils/gtmTrackers';
31
- import { EMAIL } from '../CreativesContainer/constants';
32
21
  import { selectCurrentOrgDetails } from "../../v2Containers/Cap/selectors";
22
+ import EmailWrapperView from './components/EmailWrapperView';
23
+ import useEmailWrapper from './hooks/useEmailWrapper';
33
24
 
34
- const CapRadioCardWithLabel = ComponentWithLabelHOC(CapRadioCard);
35
- const { timeTracker } = GA;
36
- const CardContainer = styled.div`
37
- margin-top: 16px;
38
- .ant-radio-group{
39
- .ant-radio-button-wrapper{
40
- &:first-child{
41
- margin-left: unset;
42
- }
43
- }
44
-
45
- }
46
- `;
47
- export class EmailWrapper extends React.Component { // eslint-disable-line react/prefer-stateless-function
48
- constructor(props) {
49
- super(props);
50
- this.emailUploader = React.createRef();
51
- this.state = {
52
- templateName: '',
53
- routeParams: {
54
- pathname: `/email/create`,
55
- query: { module: 'library', type: 'embedded' },
56
- },
57
- modeContent: {
25
+ const EmailWrapper = (props) => {
26
+ // Destructure props for clarity before passing to hook
27
+ const {
28
+ emailCreateMode,
29
+ step,
30
+ isFullMode,
31
+ EmailLayout,
32
+ isUploading,
33
+ onEmailModeChange,
34
+ isGetFormData,
35
+ type,
36
+ templatesActions,
37
+ CmsTemplates,
38
+ SelectedEdmDefaultTemplate,
39
+ showNextStep,
40
+ getFormdata,
41
+ intl,
42
+ cap,
43
+ onResetStep,
44
+ setIsLoadingContent,
45
+ showTemplateName,
46
+ showLiquidErrorInFooter,
47
+ onValidationFail,
48
+ forwardedTags,
49
+ selectedOfferDetails,
50
+ getCmsTemplatesInProgress,
51
+ currentOrgDetails,
52
+ moduleType,
53
+ onEnterTemplateName,
54
+ onRemoveTemplateName,
55
+ eventContextTags,
56
+ isLoyaltyModule,
57
+ cmsTemplatesLoader,
58
+ onPreviewContentClicked,
59
+ onTestContentClicked,
60
+ editor,
61
+ } = props;
58
62
 
59
- },
60
- // selectedCreateMode: '',
61
- isTemplateNameEmpty: true,
62
- };
63
- this.modes = [
64
- {
65
- title: <FormattedMessage {...messages.zipUpload} />,
66
- content: <FormattedMessage {...messages.zipUploadDesc} />,
67
- value: 'upload',
68
- // onClick: () => {
69
- // this.emailUploader.current.click();
70
- // },
71
- },
72
- {
73
- title: <FormattedMessage {...messages.useEditor} />,
74
- content: <FormattedMessage {...messages.useEditorDesc} />,
75
- value: 'editor',
76
- },
77
- ];
78
- }
63
+ // Pass destructured props to the custom hook
64
+ const {
65
+ templateName,
66
+ isTemplateNameEmpty,
67
+ modeContent,
68
+ modes,
69
+ isShowEmailCreate,
70
+ emailProps,
71
+ cmsTemplatesProps,
72
+ uploadButtonLabel,
73
+ onTemplateNameChange,
74
+ onChange,
75
+ useFileUpload,
76
+ } = useEmailWrapper({
77
+ emailCreateMode,
78
+ step,
79
+ isFullMode,
80
+ EmailLayout,
81
+ isUploading,
82
+ onEmailModeChange,
83
+ isGetFormData,
84
+ type,
85
+ templatesActions,
86
+ CmsTemplates,
87
+ SelectedEdmDefaultTemplate,
88
+ showNextStep,
89
+ getFormdata,
90
+ intl,
91
+ cap,
92
+ onResetStep,
93
+ setIsLoadingContent,
94
+ showTemplateName,
95
+ showLiquidErrorInFooter,
96
+ onValidationFail,
97
+ forwardedTags,
98
+ selectedOfferDetails,
99
+ getCmsTemplatesInProgress,
100
+ currentOrgDetails,
101
+ moduleType,
102
+ onEnterTemplateName,
103
+ onRemoveTemplateName,
104
+ eventContextTags,
105
+ isLoyaltyModule,
106
+ cmsTemplatesLoader,
107
+ onPreviewContentClicked,
108
+ onTestContentClicked,
109
+ editor,
110
+ });
79
111
 
80
- componentDidUpdate() {
81
- const { modeContent } = this.state;
82
- // const isValid = this.isValid();
83
- const { emailCreateMode, EmailLayout, CmsTemplates, step, SelectedEdmDefaultTemplate, templatesActions, getCmsTemplatesInProgress = false } = this.props;
84
- if (step === "modeSelection" && !this.state.selectedCreateMode && emailCreateMode === 'upload' && !EmailLayout) {
85
- //document.getElementById('upload-email-template').click();
86
- } else if (step === "templateSelection" && !this.state.selectedCreateMode) {
87
- if (emailCreateMode === "editor" && !CmsTemplates && !getCmsTemplatesInProgress) {
88
- templatesActions.getDefaultBeeTemplates();
89
- }
90
- } else if (step === "createTemplateContent" && !this.state.selectedCreateMode) {
91
- if (emailCreateMode === 'upload' && !_.isEmpty(EmailLayout)) {
92
- this.setCreateMode('upload');
93
- } else if (emailCreateMode === "editor" && _.isEmpty(SelectedEdmDefaultTemplate)) {
94
- this.handleEdmDefaultTemplateSelection(modeContent.id);
95
- }
96
- }
97
- }
98
-
99
-
100
- componentWillUnmount() {
101
- this.props.onResetStep();
102
- this.props.templatesActions.resetTemplateData();
103
- }
104
- onTemplateNameChange = ({target: {value}}) => {
105
- const {onEnterTemplateName, onRemoveTemplateName} = this.props;
106
- const isEmptyTemplateName = !value?.trim();
107
- this.setState({templateName: value, isTemplateNameEmpty: isEmptyTemplateName});
108
- if (value && onEnterTemplateName) {
109
- onEnterTemplateName();
110
- } else if (onRemoveTemplateName) {
111
- onRemoveTemplateName();
112
- }
113
- }
114
- onChange = (e) => {
115
- this.props.onEmailModeChange(e.target.value);
116
- };
117
- //isValid = () => !_.isEmpty(this.state.templateName)
118
- setCreateMode = (emailCreateMode) => {
119
- this.setState({ selectedCreateMode: emailCreateMode });
120
- }
121
- handleZipUploadError = () => {
122
- const message = {
123
- key: "email-upload-error",
124
- message: this.props.intl.formatMessage(messages.invalidUploadFileError2),
125
- description: this.props.intl.formatMessage(messages.invalidUploadFileErrorDesc2),
126
- };
127
- CapNotification.error(message);
128
- }
129
- stopTimerGA = () => {
130
- // stop timer
131
- const timeTaken = timeTracker.stopTimer(CHANNEL_CREATE_TRACK_MAPPING.email, {
132
- category: 'Creatives',
133
- action: 'Create',
134
- label: 'uploadZip',
135
- });
136
- gtmPush('creativeDetails', {
137
- channel: EMAIL,
138
- timeTaken,
139
- mode: 'uploadZip',
140
- });
141
- }
142
- handleFileUpload = (file = {}) => {
143
- const { templatesActions, intl, showNextStep, isUploading } = this.props;
144
- if (!isUploading) {
145
- const fileExtension = file.name.split('.').pop();
146
- const supportedZipFormats = ['zip'];
147
-
148
- //converted file size to MB
149
- const fileSize = file && (file.size / ( 1024 * 1024 ));
150
-
151
-
152
- //Here fileSize is in MB
153
- if (fileSize > 5) {
154
- const message = {
155
- key: "email-upload-error",
156
- message: intl.formatMessage(messages.invalidUploadFileError),
157
- description: intl.formatMessage(messages.invalidUploadFileErrorDesc3),
158
- };
159
- CapNotification.error(message);
160
- } else if (supportedZipFormats.indexOf(fileExtension.toLowerCase()) !== -1) {
161
- templatesActions.handleZipUpload(file.originFileObj, () => { //handle upload success
162
- this.stopTimerGA();
163
- this.setState({ modeContent: { file } }, showNextStep);
164
- }, this.handleZipUploadError);
165
- } else if (fileExtension === 'html' || fileExtension === 'htm') {
166
- const reader = new FileReader();
167
- reader.onload = () => {
168
- const text = reader.result;
169
- this.setState({ modeContent: { file } }, () => {
170
- templatesActions.handleHtmlUpload(text);
171
- });
172
- // showNextStep();
173
- };
174
- reader.readAsText(file.originFileObj);
175
- } else {
176
- const message = {
177
- key: "email-upload-error",
178
- message: intl.formatMessage(messages.invalidUploadFileError),
179
- description: intl.formatMessage(messages.invalidUploadFileErrorDesc),
180
- };
181
- CapNotification.error(message);
182
- }
183
- }
184
- };
185
-
186
- handleEdmDefaultTemplateSelection = (id) => {
187
- const { CmsTemplates, templatesActions } = this.props;
188
- const data = _.find(CmsTemplates, { _id: id });
189
-
190
- templatesActions.setEdmTemplate(data);
191
- templatesActions.setBEETemplate(data);
192
- this.setState({
193
- selectedCreateMode: 'editor',
194
- });
195
- };
196
- useFileUpload = ({ file }) => {
197
- this.setState({ modeContent: {} }, () => {
198
- this.handleFileUpload(file);
199
- });
200
- }
201
- useEditor = (id) => {
202
- this.setState({ modeContent: { id } }, this.props.showNextStep);
203
- }
204
-
205
- isShowEmailCreate = () => !_.isEmpty(this.state.selectedCreateMode) && (!_.isEmpty(this.props.EmailLayout) || this.props.SelectedEdmDefaultTemplate)
206
- render() {
207
- const {
208
- showTemplateName,
209
- emailCreateMode,
210
- isGetFormData,
211
- getFormdata,
212
- type,
213
- CmsTemplates,
214
- step,
215
- cap,
216
- isFullMode,
217
- EmailLayout,
218
- setIsLoadingContent,
219
- onValidationFail,
220
- forwardedTags,
221
- selectedOfferDetails,
222
- onPreviewContentClicked,
223
- onTestContentClicked,
224
- cmsTemplatesLoader,
225
- editor,
226
- currentOrgDetails,
227
- moduleType,
228
- showLiquidErrorInFooter,
229
- eventContextTags,
230
- // Flag to enable loyalty module specific features in the email editor
231
- isLoyaltyModule,
232
- messageDetails = {},
233
- } = this.props;
234
- const {
235
- templateName,
236
- modeContent,
237
- isTemplateNameEmpty,
238
- } = this.state;
239
- const isShowEmailCreate = this.isShowEmailCreate();
240
- return (
241
- <div>
242
- <CapSpin spinning={emailCreateMode === "upload" ? this.props.isUploading : false} >
243
- {step === "modeSelection" || (step === "templateSelection" && emailCreateMode === "upload") ?
244
- <div>
245
- {isFullMode &&
246
- <CapInput
247
- label={<FormattedMessage {...messages.creativeName} />}
248
- onChange={this.onTemplateNameChange}
249
- value={templateName}
250
- labelPosition="top"
251
- size="default"
252
- style={{ width: '68%'}}
253
- />
254
- }
255
- <CardContainer>
256
- <CapRadioCardWithLabel
257
- panes={this.modes}
258
- onChange={this.onChange}
259
- selected={emailCreateMode}
260
- label={<FormattedMessage {...messages.createMode} />}
261
- />
262
- </CardContainer>
263
- <div>
264
- {emailCreateMode === "upload" &&
265
- <div style={{ marginLeft: '8px' }}>
266
- <CapUploader onChange={this.useFileUpload} accept=".zip, .html, .htm" showUploadList={false}>
267
- { (isFullMode && isTemplateNameEmpty) &&
268
- <CapError type="error">
269
- < FormattedMessage {...messages.emptyTemplateName} />
270
- </CapError>
271
- }
272
- <CapButton disabled={isFullMode && isTemplateNameEmpty}>{this.props.intl.formatMessage(messages.upload)}</CapButton>
273
- </CapUploader>
274
- {!_.isEmpty(EmailLayout) &&
275
- <div>{_.get(modeContent, "file.name")}</div>
276
- }
277
- </div>
278
- }
279
- </div>
280
- </div>
281
- :
282
- <div>
283
- {isShowEmailCreate && <Email
284
- setIsLoadingContent={setIsLoadingContent}
285
- key="email-create-template"
286
- location={this.state.routeParams}
287
- route={{ name: 'email' }}
288
- params={{}}
289
- isGetFormData={isGetFormData}
290
- getFormdata={getFormdata}
291
- getFormSubscriptionData={getFormdata}
292
- getDefaultTags={type}
293
- isFullMode={isFullMode}
294
- defaultData={{ 'template-name': templateName }}
295
- cap={cap}
296
- showTemplateName={showTemplateName}
297
- showLiquidErrorInFooter={showLiquidErrorInFooter}
298
- onValidationFail={onValidationFail}
299
- forwardedTags={forwardedTags}
300
- selectedOfferDetails={selectedOfferDetails}
301
- onPreviewContentClicked={onPreviewContentClicked}
302
- onTestContentClicked={onTestContentClicked}
303
- editor={editor}
304
- moduleType={moduleType}
305
- eventContextTags={eventContextTags}
306
- isLoyaltyModule={isLoyaltyModule}
307
- messageDetails={messageDetails}
308
- />}
309
- {!isShowEmailCreate && (
310
- <CmsTemplatesComponent
311
- cmsTemplates={CmsTemplates}
312
- handleEdmDefaultTemplateSelection={this.useEditor}
313
- cmsTemplatesLoader={cmsTemplatesLoader}
314
- currentOrgDetails={currentOrgDetails || cap?.currentOrgDetails}
315
- />
316
- )}
317
- </div>
318
- }
319
- </CapSpin>
320
- </div>
321
- );
322
- }
323
- }
112
+ // Render using the presentation component with data from the hook
113
+ return (
114
+ <EmailWrapperView
115
+ isUploading={isUploading}
116
+ emailCreateMode={emailCreateMode}
117
+ step={step}
118
+ isFullMode={isFullMode}
119
+ templateName={templateName}
120
+ onTemplateNameChange={onTemplateNameChange}
121
+ isTemplateNameEmpty={isTemplateNameEmpty}
122
+ modes={modes}
123
+ onChange={onChange}
124
+ EmailLayout={EmailLayout}
125
+ modeContent={modeContent}
126
+ useFileUpload={useFileUpload}
127
+ uploadButtonLabel={uploadButtonLabel}
128
+ isShowEmailCreate={isShowEmailCreate}
129
+ emailProps={emailProps}
130
+ cmsTemplatesProps={cmsTemplatesProps}
131
+ onPreviewContentClicked={onPreviewContentClicked}
132
+ onTestContentClicked={onTestContentClicked}
133
+ editor={editor}
134
+ />
135
+ );
136
+ };
324
137
 
325
138
  EmailWrapper.propTypes = {
326
139
  onEmailModeChange: PropTypes.func.isRequired,
@@ -352,6 +165,9 @@ EmailWrapper.propTypes = {
352
165
  onRemoveTemplateName: PropTypes.func,
353
166
  eventContextTags: PropTypes.array,
354
167
  isLoyaltyModule: PropTypes.bool,
168
+ onPreviewContentClicked: PropTypes.func,
169
+ onTestContentClicked: PropTypes.func,
170
+ editor: PropTypes.object,
355
171
  };
356
172
 
357
173
  const mapStateToProps = createStructuredSelector({
@@ -0,0 +1,119 @@
1
+
2
+ // Base mock data that can be shared
3
+ const baseMockData = {
4
+ isUploading: false,
5
+ emailCreateMode: "editor",
6
+ step: "modeSelection",
7
+ isFullMode: true,
8
+ cmsTemplates: [
9
+ {
10
+ _id: "template1",
11
+ name: "Template 1",
12
+ content: "<html><body>Template 1 Content</body></html>"
13
+ },
14
+ {
15
+ _id: "template2",
16
+ name: "Template 2",
17
+ content: "<html><body>Template 2 Content</body></html>"
18
+ }
19
+ ]
20
+ };
21
+
22
+ export const EmailWrapperMockData = {
23
+ ...baseMockData,
24
+ onEmailModeChange: jest.fn(),
25
+ showTemplateName: jest.fn(),
26
+ isGetFormData: false,
27
+ getFormdata: jest.fn(),
28
+ type: "email",
29
+ cap: { currentOrgDetails: { basic_details: {} } },
30
+ setIsLoadingContent: jest.fn(),
31
+ onValidationFail: jest.fn(),
32
+ forwardedTags: {},
33
+ selectedOfferDetails: [],
34
+ onPreviewContentClicked: jest.fn(),
35
+ onTestContentClicked: jest.fn(),
36
+ editor: {},
37
+ moduleType: "email",
38
+ showLiquidErrorInFooter: jest.fn(),
39
+ eventContextTags: [],
40
+ isLoyaltyModule: false,
41
+ templatesActions: {
42
+ resetTemplateData: jest.fn(),
43
+ getDefaultBeeTemplates: jest.fn(),
44
+ handleZipUpload: jest.fn(),
45
+ handleHtmlUpload: jest.fn(),
46
+ setEdmTemplate: jest.fn(),
47
+ setBEETemplate: jest.fn()
48
+ },
49
+ showNextStep: jest.fn(),
50
+ onResetStep: jest.fn(),
51
+ onEnterTemplateName: jest.fn(),
52
+ onRemoveTemplateName: jest.fn(),
53
+ getCmsTemplatesInProgress: false,
54
+ EmailLayout: null,
55
+ SelectedEdmDefaultTemplate: null,
56
+ cmsTemplatesLoader: false,
57
+ currentOrgDetails: { basic_details: {} },
58
+ intl: {
59
+ formatMessage: jest.fn(message => message.defaultMessage || "")
60
+ }
61
+ };
62
+
63
+ export const EmailWrapperViewMockProps = {
64
+ ...baseMockData,
65
+ templateName: "Test Template",
66
+ onTemplateNameChange: jest.fn(),
67
+ isTemplateNameEmpty: false,
68
+ modes: [
69
+ {
70
+ title: "Upload zip file",
71
+ content: "Upload compressed file (Zip) containing HTML & images",
72
+ value: "upload"
73
+ },
74
+ {
75
+ title: "Create using editor",
76
+ content: "Create using in-built template",
77
+ value: "editor"
78
+ }
79
+ ],
80
+ onChange: jest.fn(),
81
+ EmailLayout: null,
82
+ modeContent: {},
83
+ useFileUpload: jest.fn(),
84
+ uploadButtonLabel: "Upload",
85
+ isShowEmailCreate: false,
86
+ emailProps: {
87
+ key: "email-create-template",
88
+ location: {
89
+ pathname: `/email/create`,
90
+ query: { module: "library", type: "embedded" }
91
+ },
92
+ route: { name: "email" },
93
+ params: {},
94
+ isGetFormData: false,
95
+ getFormdata: jest.fn(),
96
+ getFormSubscriptionData: jest.fn(),
97
+ getDefaultTags: "email",
98
+ isFullMode: true,
99
+ defaultData: { "template-name": "Test Template" },
100
+ cap: { currentOrgDetails: { basic_details: {} } },
101
+ showTemplateName: jest.fn(),
102
+ showLiquidErrorInFooter: jest.fn(),
103
+ onValidationFail: jest.fn(),
104
+ forwardedTags: {},
105
+ selectedOfferDetails: [],
106
+ onPreviewContentClicked: jest.fn(),
107
+ onTestContentClicked: jest.fn(),
108
+ editor: {},
109
+ moduleType: "email",
110
+ eventContextTags: [],
111
+ isLoyaltyModule: false
112
+ },
113
+ cmsTemplatesProps: {
114
+ cmsTemplates: baseMockData.cmsTemplates,
115
+ handleEdmDefaultTemplateSelection: jest.fn(),
116
+ cmsTemplatesLoader: false,
117
+ currentOrgDetails: { basic_details: {} }
118
+ }
119
+ };