@capillarytech/creatives-library 6.10.0 → 6.10.2

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 (36) hide show
  1. package/components/CapTagList/index.js +1 -1
  2. package/components/Edmeditor/index.js +1 -1
  3. package/components/FormBuilder/index.js +0 -1
  4. package/containers/TagList/index.js +3 -3
  5. package/index.html +3 -0
  6. package/package.json +2 -1
  7. package/services/api.js +19 -4
  8. package/translations/en.json +117 -4
  9. package/translations/zh.json +113 -0
  10. package/v2Components/BeeEditor/index.js +263 -0
  11. package/v2Components/BeeEditor/index.scss +11 -0
  12. package/v2Components/BeeEditor/messages.js +71 -0
  13. package/v2Components/BeeEditor/tests/index.test.js +10 -0
  14. package/v2Components/CapTagList/index.js +55 -26
  15. package/v2Components/CmsTemplatesComponent/index.js +4 -4
  16. package/v2Components/Edmeditor/index.js +1 -1
  17. package/v2Components/EmailPreview/_emailPreview.scss +2 -2
  18. package/v2Components/FormBuilder/index.js +78 -43
  19. package/v2Containers/App/constants.js +1 -0
  20. package/v2Containers/CreativesContainer/SlideBoxFooter.js +2 -2
  21. package/v2Containers/CreativesContainer/index.js +7 -2
  22. package/v2Containers/Email/constants.js +1 -0
  23. package/v2Containers/Email/index.js +170 -116
  24. package/v2Containers/Email/initialSchema.js +18 -3
  25. package/v2Containers/Email/sagas.js +2 -2
  26. package/v2Containers/Email/selectors.js +5 -0
  27. package/v2Containers/EmailWrapper/index.js +19 -3
  28. package/v2Containers/Line/Container/Image/index.js +1 -1
  29. package/v2Containers/TagList/index.js +13 -6
  30. package/v2Containers/Templates/actions.js +8 -3
  31. package/v2Containers/Templates/constants.js +6 -4
  32. package/v2Containers/Templates/index.js +36 -20
  33. package/v2Containers/Templates/messages.js +8 -0
  34. package/v2Containers/Templates/reducer.js +13 -5
  35. package/v2Containers/Templates/sagas.js +7 -7
  36. package/v2Containers/Templates/selectors.js +19 -1
@@ -199,9 +199,24 @@ export const response = {
199
199
  "getEditorInstanse",
200
200
  ],
201
201
  },
202
+ // will remove once bee gets tested end to end
203
+ // {
204
+ // id: "edmeditor",
205
+ // type: "edmeditor",
206
+ // metaType: "text",
207
+ // datatype: "string",
208
+ // required: true,
209
+ // onlyDisplay: true,
210
+ // standalone: false,
211
+ // width: 24,
212
+ // order: 2,
213
+ // customComponent: true,
214
+ // colStyle: { display: "none" },
215
+ // supportedEvents: [],
216
+ // },
202
217
  {
203
- id: "edmeditor",
204
- type: "edmeditor",
218
+ id: "BEEeditor",
219
+ type: "BEEeditor",
205
220
  metaType: "text",
206
221
  datatype: "string",
207
222
  required: true,
@@ -365,7 +380,7 @@ export const response = {
365
380
  styling: "semantic",
366
381
  order: 3,
367
382
  width: 2,
368
- offset: 1,
383
+ offset: 4,
369
384
  fluid: false,
370
385
  onlyDisplay: true,
371
386
  submitAction: "onTabOptionSelect",
@@ -53,7 +53,7 @@ export function* getAllAssets(assetType, queryParams) {
53
53
 
54
54
  export function* getCmsSetting({cmsType, projectId, cmsMode, langId, isEdmSupport}) {
55
55
  try {
56
- const result = yield call(Api.getCmsTemplateSettings, cmsType, projectId, cmsMode, langId, isEdmSupport);
56
+ const result = yield call(Api.getCmsTemplateSettingsV2, cmsType, projectId, cmsMode, langId, isEdmSupport);
57
57
 
58
58
  yield put({ type: types.GET_CMS_EDITOR_DETAILS_SUCCESS, settings: result.data.response.cmsDetails });
59
59
  } catch (error) {
@@ -63,7 +63,7 @@ export function* getCmsSetting({cmsType, projectId, cmsMode, langId, isEdmSuppor
63
63
 
64
64
  export function* getCmsData({cmsType, projectId, langId}) {
65
65
  try {
66
- const result = yield call(Api.getCmsTemplateData, cmsType, projectId, langId);
66
+ const result = yield call(Api.getCmsTemplateDataV2, cmsType, projectId, langId);
67
67
 
68
68
  yield put({ type: types.GET_CMS_EDITOR_DATA_SUCCESS, data: result.data.response.data, langId: result.data.response.langId });
69
69
  } catch (error) {
@@ -26,9 +26,14 @@ const selectLoadingStatus = () => createSelector(
26
26
  selectEmailDomain(), (email) => email.createTemplateInProgress || (email.assetUploading !== undefined && email.assetUploading)
27
27
  );
28
28
 
29
+ const makeSelectFetchingCmsData = () => createSelector(
30
+ selectEmailDomain(), (state) => state.get('fetchingCmsData')
31
+ );
32
+
29
33
  export default makeSelectEmail;
30
34
  export {
31
35
  makeSelectEmail,
32
36
  makeSelectCreateResponse,
33
37
  selectLoadingStatus,
38
+ makeSelectFetchingCmsData,
34
39
  };
@@ -15,7 +15,13 @@ import styled from 'styled-components';
15
15
  import { CapRadioCard, CapNotification, CapInput, CapUploader, CapSpin, CapButton } from '@capillarytech/cap-ui-library';
16
16
  import ComponentWithLabelHOC from '@capillarytech/cap-ui-library/assets/HOCs/ComponentWithLabelHOC';
17
17
  import { UserIsAuthenticated } from '../../utils/authWrapper';
18
- import { selectEmailLayout, selectCmsTemplates, selectEdmEditor, uploadSelector } from '../Templates/selectors';
18
+ import {
19
+ selectEmailLayout,
20
+ selectCmsTemplates,
21
+ selectEdmEditor,
22
+ uploadSelector,
23
+ selectCmsTemplatesLoader,
24
+ } from '../Templates/selectors';
19
25
  import * as templatesActionsCreators from '../Templates/actions';
20
26
  import Email from '../Email';
21
27
  import CmsTemplatesComponent from '../../v2Components/CmsTemplatesComponent';
@@ -76,7 +82,7 @@ export class EmailWrapper extends React.Component { // eslint-disable-line react
76
82
  //document.getElementById('upload-email-template').click();
77
83
  } else if (step === "templateSelection" && !this.state.selectedCreateMode) {
78
84
  if (emailCreateMode === "editor" && !CmsTemplates) {
79
- templatesActions.getEdmDefaultTemplates();
85
+ templatesActions.getDefaultBeeTemplates();
80
86
  }
81
87
  } else if (step === "createTemplateContent" && !this.state.selectedCreateMode) {
82
88
  if (emailCreateMode === 'upload' && !_.isEmpty(EmailLayout)) {
@@ -156,6 +162,7 @@ export class EmailWrapper extends React.Component { // eslint-disable-line react
156
162
  const data = _.find(CmsTemplates, { _id: id });
157
163
 
158
164
  templatesActions.setEdmTemplate(data);
165
+ templatesActions.setBEETemplate(data);
159
166
  this.setState({
160
167
  selectedCreateMode: 'editor',
161
168
  });
@@ -188,6 +195,7 @@ export class EmailWrapper extends React.Component { // eslint-disable-line react
188
195
  selectedOfferDetails,
189
196
  onPreviewContentClicked,
190
197
  onTestContentClicked,
198
+ cmsTemplatesLoader,
191
199
  } = this.props;
192
200
  const {
193
201
  templateName,
@@ -206,6 +214,7 @@ export class EmailWrapper extends React.Component { // eslint-disable-line react
206
214
  value={templateName}
207
215
  labelPosition="top"
208
216
  size="default"
217
+ style={{ width: '68%'}}
209
218
  />
210
219
  }
211
220
  <CardContainer>
@@ -251,7 +260,13 @@ export class EmailWrapper extends React.Component { // eslint-disable-line react
251
260
  onPreviewContentClicked={onPreviewContentClicked}
252
261
  onTestContentClicked={onTestContentClicked}
253
262
  />}
254
- {CmsTemplates && !isShowEmailCreate && <CmsTemplatesComponent cmsTemplates={CmsTemplates} handleEdmDefaultTemplateSelection={this.useEditor} />}
263
+ {!isShowEmailCreate && (
264
+ <CmsTemplatesComponent
265
+ cmsTemplates={CmsTemplates}
266
+ handleEdmDefaultTemplateSelection={this.useEditor}
267
+ cmsTemplatesLoader={cmsTemplatesLoader}
268
+ />
269
+ )}
255
270
  </div>
256
271
  }
257
272
  </CapSpin>
@@ -289,6 +304,7 @@ const mapStateToProps = createStructuredSelector({
289
304
  CmsTemplates: selectCmsTemplates(),
290
305
  SelectedEdmDefaultTemplate: selectEdmEditor(),
291
306
  isUploading: uploadSelector(),
307
+ cmsTemplatesLoader: selectCmsTemplatesLoader(),
292
308
  });
293
309
 
294
310
  function mapDispatchToProps(dispatch) {
@@ -87,7 +87,7 @@ export const LineImage = ({
87
87
  if (Line.uploadedAssetData && Object.keys(Line.uploadedAssetData).length) {
88
88
  const imgSrc = get(Line, 'uploadedAssetData.metaInfo.secure_file_path', '');
89
89
  const imgPreview = get(Line, 'uploadedAssetData.metaInfo.secure_file_path_preview', '');
90
- if (imsSrc) {
90
+ if (imgSrc) {
91
91
  updateUploadedAssetList({
92
92
  ...uploadedAssetList,
93
93
  [index]: {
@@ -66,24 +66,25 @@ export class TagList extends React.Component { // eslint-disable-line react/pref
66
66
  }
67
67
 
68
68
  populateTags(tagsList) {
69
- console.log('populating tags', tagsList);
69
+ console.log('populating tags', (tagsList || []).length);
70
70
  const mainTags = {};
71
71
 
72
72
  //Form tags object with tag headers
73
73
  _.forEach(tagsList, (temp) => {
74
74
  const tag = temp.definition;
75
+ const { userLocale } = this.props;
75
76
  if (!tag['tag-header']) {
76
77
  mainTags[tag.value] = {
77
- name: tag.label[this.props.userLocale] ? tag.label[this.props.userLocale] : tag.label.en,
78
+ name: tag.label[userLocale] ? tag.label[userLocale] : tag.label.en,
78
79
  desc: tag.desc ? tag.desc : tag.label.en,
79
80
  };
80
81
  } else if (tag['tag-header'] && mainTags[tag.value]) {
81
82
  mainTags[tag.value].subtags = _.concat(mainTags[tag.value].subtags, tag.subtags);
82
83
  } else if (!mainTags[tag.value]) {
83
- console.log('Inside ', tag.label);
84
+ // console.log('Inside ', tag.label);
84
85
  mainTags[tag.value] = {
85
86
  'tag-header': true,
86
- "name": tag.label[this.props.userLocale] ? tag.label[this.props.userLocale] : tag.label.en,
87
+ "name": tag.label[userLocale] ? tag.label[userLocale] : tag.label.en,
87
88
  "desc": tag.desc ? tag.desc : tag.label.en,
88
89
  "subtags": tag.subtags,
89
90
  };
@@ -228,13 +229,13 @@ export class TagList extends React.Component { // eslint-disable-line react/pref
228
229
  }
229
230
  if (this.props.tags && this.props.tags.length > 0) {
230
231
  tags = this.populateTags(this.props.tags);
231
- console.log('populating tags', tags);
232
+ console.log('populating tags', Object.keys(tags || {}).length);
232
233
  }
233
234
  if (this.props.selectedOfferDetails && !_.isEmpty(this.props.selectedOfferDetails) && (tags && tags.coupon)) {
234
235
  this.transformCouponTags(this.props.selectedOfferDetails, tags);
235
236
  }
236
237
  tags = _.merge( {}, tags, injectedTags);
237
- console.log('merged tags', tags);
238
+ console.log('merged tags', Object.keys(tags || {}).length);
238
239
  return (
239
240
  <div className={this.props.className ? this.props.className : ''}>
240
241
  <CapTagList
@@ -242,8 +243,11 @@ export class TagList extends React.Component { // eslint-disable-line react/pref
242
243
  tags={tags}
243
244
  onSelect={this.onSelect}
244
245
  label={this.props.label}
246
+ visibleTaglist={this.props.visibleTaglist}
247
+ hidePopover={this.props.hidePopover}
245
248
  onContextChange={this.getTagsforContext}
246
249
  moduleFilterEnabled={this.props.moduleFilterEnabled}
250
+ modalProps={this.props.modalProps}
247
251
  />
248
252
  </div>
249
253
  );
@@ -265,6 +269,9 @@ TagList.propTypes = {
265
269
  className: PropTypes.string,
266
270
  userLocale: PropTypes.string,
267
271
  selectedOfferDetails: PropTypes.array,
272
+ visibleTaglist: PropTypes.bool,
273
+ hidePopover: PropTypes.bool,
274
+ modalProps: PropTypes.any,
268
275
  };
269
276
 
270
277
  const mapStateToProps = createStructuredSelector({
@@ -75,9 +75,9 @@
75
75
  };
76
76
  }
77
77
 
78
- export function getEdmDefaultTemplates() {
78
+ export function getDefaultBeeTemplates() {
79
79
  return {
80
- type: types.GET_EDM_DEAFULT_TEMPLATES_REQUEST,
80
+ type: types.GET_DEAFULT_BEE_TEMPLATES_REQUEST,
81
81
  };
82
82
  }
83
83
 
@@ -87,7 +87,12 @@
87
87
  template,
88
88
  };
89
89
  }
90
-
90
+ export function setBEETemplate(template) {
91
+ return {
92
+ type: types.SET_BEE_TEMPLATE,
93
+ template,
94
+ };
95
+ }
91
96
  export function getTemplateDetails(id, channel) {
92
97
  console.log('getting template', id, channel);
93
98
  return {
@@ -28,16 +28,14 @@ export const SEND_ZIPPED_FILE_REQUEST = "app/v2Containers/Templates/SEND_ZIPPED_
28
28
  export const SEND_ZIPPED_FILE_SUCCESS = "app/v2Containers/Templates/SEND_ZIPPED_FILE_SUCCESS";
29
29
  export const SEND_ZIPPED_FILE_FAILURE = "app/v2Containers/Templates/SEND_ZIPPED_FILE_FAILURE";
30
30
 
31
- export const GET_EDM_DEAFULT_TEMPLATES_REQUEST = 'app/v2Containers/Templates/GET_EDM_DEAFULT_TEMPLATES_REQUEST';
32
- export const GET_EDM_DEAFULT_TEMPLATES_SUCCESS = 'app/v2Containers/Templates/GET_EDM_DEAFULT_TEMPLATES_SUCCESS';
33
- export const GET_EDM_DEAFULT_TEMPLATES_FAILURE = 'app/v2Containers/Templates/GET_EDM_DEAFULT_TEMPLATES_FAILURE';
34
-
35
31
  export const GET_TEMPLATE_DETAILS_REQUEST = 'app/v2Containers/Templates/GET_TEMPLATE_DETAILS_REQUEST';
36
32
  export const GET_TEMPLATE_DETAILS_SUCCESS = 'app/v2Containers/Templates/GET_TEMPLATE_DETAILS_SUCCESS';
37
33
  export const GET_TEMPLATE_DETAILS_FAILURE = 'app/v2Containers/Templates/GET_TEMPLATE_DETAILS_FAILURE';
38
34
 
39
35
 
40
36
  export const SET_EDM_TEMPLATE = "app/v2Containers/Templates/SET_EDM_TEMPLATE";
37
+ export const SET_BEE_TEMPLATE = "app/v2Containers/Templates/SET_BEE_TEMPLATE";
38
+
41
39
  export const RESET_ACCOUNT = "app/v2Containers/Templates/RESET_ACCOUNT";
42
40
  export const RESET_TEMPLATE = "app/v2Containers/Templates/RESET_TEMPLATE";
43
41
  export const RESET_TEMPLATE_DATA = "app/v2Containers/Templates/RESET_TEMPLATE_DATA";
@@ -45,3 +43,7 @@ export const RESET_UPLOAD_DATA = "app/v2Containers/Templates/RESET_UPLOAD_DATA";
45
43
  export const CLEAR_TEMPLATE_STORE_DATA = "app/v2Containers/Templates/CLEAR_TEMPLATE_STORE_DATA";
46
44
 
47
45
  export const SET_LINE_ACCOUNT = "app/v2Containers/Templates/SET_LINE_ACCOUNT";
46
+
47
+ export const GET_DEAFULT_BEE_TEMPLATES_REQUEST = 'app/v2Containers/Templates/GET_DEAFULT_BEE_TEMPLATES_REQUEST';
48
+ export const GET_DEAFULT_BEE_TEMPLATES_SUCCESS = 'app/v2Containers/Templates/GET_DEAFULT_BEE_TEMPLATES_SUCCESS';
49
+ export const GET_DEAFULT_BEE_TEMPLATES_FAILURE = 'app/v2Containers/Templates/GET_DEAFULT_BEE_TEMPLATES_FAILURE';
@@ -208,10 +208,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
208
208
  queryParams.perPage = this.state.perPageLimit;
209
209
  const channel = this.state.channel;
210
210
  this.props.actions.getAllTemplates(channel, queryParams);
211
- //this.getAllTemplates({});
212
- // if (this.state.channel.toLowerCase() === "email") {
213
- // this.props.actions.getEdmDefaultTemplates();
214
- // }
215
211
  }
216
212
 
217
213
  window.addEventListener("message", this.handleFrameTasks);
@@ -236,7 +232,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
236
232
  nextProps.actions.getWeCrmAccounts();
237
233
  } else if (nextProps.route.name.toLowerCase() === 'email') {
238
234
  channel = 'Email';
239
- // this.props.actions.getEdmDefaultTemplates();
240
235
  } else if (nextProps.route.name.toLowerCase() === "mobilepush") {
241
236
  this.setState({defaultAccount: true});
242
237
  channel = "mobilepush";
@@ -654,7 +649,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
654
649
  {
655
650
  carouselContent.map(({
656
651
  imageUrl,
657
- actionLabel
652
+ actionLabel,
658
653
  }) => (
659
654
  <img
660
655
  width={208}
@@ -1001,7 +996,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1001
996
  break;
1002
997
  }
1003
998
  };
1004
-
999
+
1005
1000
  createTemplate(ev) {
1006
1001
  const type = this.props.location.query.type;
1007
1002
  const module = this.props.location.query.module ? this.props.location.query.module : 'default';
@@ -1120,7 +1115,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1120
1115
  toggleEdmEmailTemplateSelection = () => {
1121
1116
  this.setState( (prevState) => ({
1122
1117
  showEdmEmailTemplates: !prevState.showEdmEmailTemplates}), () => {
1123
- this.props.actions.getEdmDefaultTemplates();
1118
+ this.props.actions.getDefaultBeeTemplates();
1124
1119
  });
1125
1120
  };
1126
1121
 
@@ -1415,7 +1410,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1415
1410
  //content = template.versions.base.messages[0].Text;
1416
1411
  const lineContent = template.versions.base.content;
1417
1412
  content = {
1418
- bodyText:lineContent && lineContent.messages[0].text ? lineContent.messages[0].text : '',
1413
+ bodyText: lineContent && lineContent.messages[0].text ? lineContent.messages[0].text : '',
1419
1414
  bodyImage: lineContent && lineContent.messages[0].originalContentUrl ? lineContent.messages[0].originalContentUrl : '',
1420
1415
  };
1421
1416
  const modeType = lineContent && lineContent.messages[0].type;
@@ -1538,12 +1533,23 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1538
1533
 
1539
1534
 
1540
1535
  isLoading = () => {
1541
- const lineLoader = (this.props.Templates.getAllTemplatesInProgress && this.state.channel.toLowerCase() === 'line');
1542
- const smsLoader = (this.props.Templates.getAllTemplatesInProgress && this.state.channel.toLowerCase() === 'sms');
1543
- const wechatLoader = (((this.state.selectedAccount !== '' && this.props.Templates.getAllTemplatesInProgress) || (this.props.Templates.fetchingWeCrmAccounts)) && this.state.channel.toLowerCase() === 'wechat');
1544
- const mobilePushLoader = (((this.props.Templates.getAllTemplatesInProgress) || (this.props.Templates.fetchingWeCrmAccounts)) && this.state.channel.toLowerCase() === 'mobilepush');
1545
- const emailLoader = ((this.props.Templates.getAllTemplatesInProgress || this.props.Templates.sendingFile) && this.state.channel.toLowerCase() === 'email');
1546
- const ebillLoader = ((this.props.Templates.getAllTemplatesInProgress || this.props.Templates.sendingFile) && this.state.channel.toLowerCase() === 'ebill');
1536
+ const { EmailCreate, Templates } = this.props;
1537
+ const {
1538
+ getAllTemplatesInProgress,
1539
+ deleteTemplateInProgress,
1540
+ fetchingWeCrmAccounts,
1541
+ sendingFile,
1542
+ } = Templates;
1543
+ const lineLoader = (getAllTemplatesInProgress && this.state.channel.toLowerCase() === 'line');
1544
+ const smsLoader = (getAllTemplatesInProgress && this.state.channel.toLowerCase() === 'sms');
1545
+ const wechatLoader = (((this.state.selectedAccount !== '' && getAllTemplatesInProgress) || (fetchingWeCrmAccounts)) && this.state.channel.toLowerCase() === 'wechat');
1546
+ const mobilePushLoader = (((getAllTemplatesInProgress) || (fetchingWeCrmAccounts)) && this.state.channel.toLowerCase() === 'mobilepush');
1547
+ const emailLoader = (
1548
+ (getAllTemplatesInProgress ||
1549
+ sendingFile ||
1550
+ deleteTemplateInProgress ||
1551
+ EmailCreate.duplicateTemplateInProgress) && this.state.channel.toLowerCase() === 'email');
1552
+ const ebillLoader = ((getAllTemplatesInProgress || sendingFile) && this.state.channel.toLowerCase() === 'ebill');
1547
1553
  const isLoading = ((wechatLoader !== undefined) ? wechatLoader : false) ||
1548
1554
  (smsLoader !== undefined ? smsLoader : false) ||
1549
1555
  (emailLoader !== undefined ? emailLoader : false) ||
@@ -1801,7 +1807,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1801
1807
  </CapRadio.CapRadioGroup>
1802
1808
  }
1803
1809
  {
1804
- channel.toUpperCase() === LINE &&
1810
+ channel.toUpperCase() === LINE &&
1805
1811
  isFullMode
1806
1812
  ? (
1807
1813
  <CapRadio.CapRadioGroup className="line-filters" defaultValue={lineFilter} onChange={this.setLineFilter}>
@@ -1831,9 +1837,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1831
1837
  }
1832
1838
  </CapRadio.CapRadioGroup>
1833
1839
  )
1834
- : () => {
1835
- return null;
1836
- }
1840
+ : () => null
1837
1841
  }
1838
1842
  <div style={{display: "flex", justifyContent: "space-between", alignItems: 'center'}}>
1839
1843
  {isfilterContentVisisble && !isWechatEmbedded && <CapButton
@@ -1858,7 +1862,19 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1858
1862
  const creativesParams = this.getCreativesParams();
1859
1863
  const templates = this.props.TemplatesList || [];
1860
1864
  const {route} = this.props;
1861
- const loadingTip = (this.props.Templates.sendingFile && (this.state.channel.toLowerCase() === 'email' || this.state.channel.toLowerCase() === 'ebill')) ? this.props.intl.formatMessage(messages.uploadingFile) : this.props.intl.formatMessage(messages.gettingAllTemplates);
1865
+ const loadingTipMap = {
1866
+ sendingFile: 'uploadingFile',
1867
+ deleteTemplateInProgress: 'deletingTemplate',
1868
+ duplicateTemplateInProgress: 'duplicatingTemplate',
1869
+ };
1870
+ const { sendingFile, deleteTemplateInProgress } = this.props.Templates;
1871
+ const loadingTipIntl =
1872
+ ((['email', 'ebill'].includes(this.state.channel.toLowerCase() === 'email')) && sendingFile && 'sendingFile') ||
1873
+ (deleteTemplateInProgress && 'deletingTemplate') ||
1874
+ (this.props.EmailCreate.duplicateTemplateInProgress && 'duplicatingTemplate');
1875
+
1876
+ const loadingTip = messages[loadingTipIntl] ? this.props.intl.formatMessage(messages[loadingTipIntl]) : this.props.intl.formatMessage(messages.gettingAllTemplates);
1877
+
1862
1878
  return (
1863
1879
  <>
1864
1880
  {activeMode === ACCOUNT_CHANGE_MODE && this.renderAccountSelection()}
@@ -354,4 +354,12 @@ export default defineMessages({
354
354
  id: `${scope}.richMediaTemplates`,
355
355
  defaultMessage: 'Rich media templates',
356
356
  },
357
+ deletingTemplate: {
358
+ id: `${scope}.deletingTemplate`,
359
+ defaultMessage: 'Deleting template...',
360
+ },
361
+ duplicatingTemplate: {
362
+ id: `${scope}.duplicatingTemplate`,
363
+ defaultMessage: 'Duplicating template...'
364
+ },
357
365
  });
@@ -85,7 +85,8 @@ function templatesReducer(state = initialState, action) {
85
85
  case types.SET_SELECTED_LAYOUT:
86
86
  return state
87
87
  .set('selectedEmailLayout', fromJS(action.selectedTemplate))
88
- .set('edmTemplate', fromJS({}));
88
+ .set('edmTemplate', fromJS({}))
89
+ .set('BEETemplate', fromJS({}));
89
90
  case types.RESET_UPLOAD_DATA:
90
91
  return state
91
92
  .set('selectedEmailLayout', "");
@@ -98,27 +99,34 @@ function templatesReducer(state = initialState, action) {
98
99
  return state
99
100
  .set('sendingFile', false)
100
101
  .set('selectedEmailLayout', fromJS(action.selectedTemplate))
101
- .set('edmTemplate', fromJS({}));
102
+ .set('edmTemplate', fromJS({}))
103
+ .set('BEETemplate', fromJS({}));
102
104
  case types.SEND_ZIPPED_FILE_FAILURE:
103
105
  return state
104
106
  .set('sendingFile', false)
105
107
  .set('errorSendingFile', true)
106
108
  .set('errorMessage', action.data)
107
109
  .set('selectedEmailLayout', "");
108
- case types.GET_EDM_DEAFULT_TEMPLATES_REQUEST:
110
+ case types.GET_DEAFULT_BEE_TEMPLATES_REQUEST:
109
111
  return state.set('getCmsTemplatesInProgress', true);
110
- case types.GET_EDM_DEAFULT_TEMPLATES_SUCCESS:
112
+ case types.GET_DEAFULT_BEE_TEMPLATES_SUCCESS:
111
113
  return state.set('getCmsTemplatesInProgress', false)
112
114
  .set('cmsTemplates', action.data ? fromJS(action.data.templates) : []);
113
- case types.GET_EDM_DEAFULT_TEMPLATES_FAILURE:
115
+ case types.GET_DEAFULT_BEE_TEMPLATES_FAILURE:
114
116
  return state.set('getCmsTemplatesInProgress', false);
115
117
  case types.SET_EDM_TEMPLATE:
116
118
  return state
117
119
  .set('edmTemplate', fromJS(action.template))
120
+ .set('BEETemplate', fromJS(action.template))
121
+ .set('selectedEmailLayout', "");
122
+ case types.SET_BEE_TEMPLATE:
123
+ return state
124
+ .set('BEETemplate', fromJS(action.template))
118
125
  .set('selectedEmailLayout', "");
119
126
  case types.RESET_TEMPLATE_DATA:
120
127
  return state
121
128
  .set('edmTemplate', fromJS({}))
129
+ .set('BEETemplate', fromJS({}))
122
130
  .set('selectedEmailLayout', "")
123
131
  .set('templateDetails', fromJS({}));
124
132
  case types.GET_TEMPLATE_DETAILS_REQUEST:
@@ -102,14 +102,14 @@ export function* sendZippedFile({selectedFile, errorHandler, successHandler}) {
102
102
  }
103
103
  }
104
104
 
105
- export function* getEdmTemplates() {
105
+ export function* getDefaultBeeTemplates() {
106
106
  try {
107
107
  console.log('saga getAllTemplates');
108
- const result = yield call(Api.getEdmTemplates);
108
+ const result = yield call(Api.getDefaultBeeTemplates);
109
109
  const edmTemplates = result.response;
110
- yield put({ type: types.GET_EDM_DEAFULT_TEMPLATES_SUCCESS, data: edmTemplates });
110
+ yield put({ type: types.GET_DEAFULT_BEE_TEMPLATES_SUCCESS, data: edmTemplates });
111
111
  } catch (error) {
112
- yield put({ type: types.GET_EDM_DEAFULT_TEMPLATES_FAILURE, error });
112
+ yield put({ type: types.GET_DEAFULT_BEE_TEMPLATES_FAILURE, error });
113
113
  }
114
114
  }
115
115
 
@@ -155,8 +155,8 @@ function* watchSendingFile() {
155
155
  yield cancel(watcher);
156
156
  }
157
157
 
158
- function* watchGetEdmDefaultTemplates() {
159
- const watcher = yield takeLatest(types.GET_EDM_DEAFULT_TEMPLATES_REQUEST, getEdmTemplates);
158
+ function* watchGetDefaultBeeTemplates() {
159
+ const watcher = yield takeLatest(types.GET_DEAFULT_BEE_TEMPLATES_REQUEST, getDefaultBeeTemplates);
160
160
  yield take(LOCATION_CHANGE);
161
161
  yield cancel(watcher);
162
162
  }
@@ -174,6 +174,6 @@ export default [
174
174
  watchGetUserList,
175
175
  watchFetchWeCrmAccounts,
176
176
  watchSendingFile,
177
- watchGetEdmDefaultTemplates,
177
+ watchGetDefaultBeeTemplates,
178
178
  watchGetTemplateDetails,
179
179
  ];
@@ -57,12 +57,30 @@ const selectCmsTemplates = () => createSelector(makeSelectTemplates(), (template
57
57
  return null;
58
58
  });
59
59
 
60
+ const selectCmsTemplatesLoader = () => createSelector(
61
+ makeSelectTemplates(),
62
+ (templates) => templates.getCmsTemplatesInProgress,
63
+ );
64
+
60
65
  const selectEdmEditor = () => createSelector(makeSelectTemplates(), (templates) => {
61
66
  const {edmTemplate} = templates;
62
67
  return edmTemplate || null;
63
68
  });
69
+
70
+ const selectBEEEditor = () => createSelector(makeSelectTemplates(), (templates) => {
71
+ const {BEETemplate} = templates;
72
+ return BEETemplate || null;
73
+ });
74
+
64
75
  export {
65
76
  uploadSelector,
66
77
  templateUserList,
67
- makeSelectTemplates, makeSelectTemplatesResponse, selectTemplateContent, selectEmailLayout, selectCmsTemplates, selectEdmEditor,
78
+ makeSelectTemplates,
79
+ makeSelectTemplatesResponse,
80
+ selectTemplateContent,
81
+ selectEmailLayout,
82
+ selectCmsTemplates,
83
+ selectEdmEditor,
84
+ selectBEEEditor,
85
+ selectCmsTemplatesLoader,
68
86
  };