@capillarytech/creatives-library 8.0.69-alpha.6 → 8.0.69-alpha.8

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.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capillarytech/creatives-library",
3
3
  "author": "meharaj",
4
- "version": "8.0.69-alpha.6",
4
+ "version": "8.0.69-alpha.8",
5
5
  "description": "Capillary creatives ui",
6
6
  "main": "./index.js",
7
7
  "module": "./index.es.js",
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
+ import Bugsnag from "@bugsnag/js";
3
4
  import {
4
5
  CapSlideBox,
5
6
  CapHeader,
@@ -139,21 +140,27 @@ export class Creatives extends React.Component {
139
140
  templateData.updatedByName = commonUtil.getUserNameById(userId, usersList);
140
141
  this.setState({ slidBoxContent: constants.PREVIEW, templateData });
141
142
  } else {
142
- const {
143
- name = "",
144
- sourceAccountIdentifier = "",
145
- configs: { token = "" } = {},
146
- } = get(this.props, "Templates.selectedZaloAccount", {});
147
- const { hostName = '' } = get(this.props, "Templates.senderDetails", {});
148
- this.props.zaloActions.getTemplateInfoById({
149
- username: name,
150
- oa_id: sourceAccountIdentifier,
151
- token,
152
- host: hostName,
153
- id: template?._id,
154
- preview: true,
155
- actionCallback: this.actionCallback,
156
- });
143
+ if (get(template, 'versions.base.content.zalo.previewUrl')) {
144
+ commonUtil.handlePreviewInNewTab(
145
+ template.versions.base.content.zalo.previewUrl
146
+ );
147
+ } else {
148
+ const {
149
+ name = "",
150
+ sourceAccountIdentifier = "",
151
+ configs: { token = "" } = {},
152
+ hostName = ""
153
+ } = get(this.props, "Templates.selectedZaloAccount", {});
154
+ this.props.zaloActions.getTemplateInfoById({
155
+ username: name,
156
+ oa_id: sourceAccountIdentifier,
157
+ token,
158
+ host: hostName || this.props?.hostName || this.props.Templates?.senderDetails?.hostName,
159
+ id: template?._id,
160
+ preview: true,
161
+ actionCallback: this.actionCallback,
162
+ });
163
+ }
157
164
  }
158
165
  };
159
166
 
@@ -12,6 +12,7 @@ import styled from 'styled-components';
12
12
  import {injectIntl, intlShape, FormattedMessage } from 'react-intl';
13
13
  import { createStructuredSelector } from 'reselect';
14
14
  import moment from "moment";
15
+ import Bugsnag from "@bugsnag/js";
15
16
  import get from 'lodash/get';
16
17
  import isEmpty from 'lodash/isEmpty';
17
18
  import isEqual from 'lodash/isEqual';
@@ -50,7 +51,8 @@ import {
50
51
  CapImage,
51
52
  CapStatus,
52
53
  CapColoredTag,
53
- } from '@capillarytech/cap-ui-library';
54
+ CapSpin
55
+ } from "@capillarytech/cap-ui-library";
54
56
  import { makeSelectTemplates, makeSelectTemplatesResponse } from './selectors';
55
57
  import { makeSelectCreate as makeSelectCreateSms} from '../Sms/Create/selectors';
56
58
  import { makeSelectCreate as makeSelectCreateMobilePush } from '../MobilePush/Create/selectors';
@@ -227,6 +229,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
227
229
  hostName: '',
228
230
  searchedZaloTemplates: [],
229
231
  searchingZaloTemplate: false,
232
+ zaloPreviewItemId: {},
230
233
  };
231
234
 
232
235
  this.handleOnHoverItem = this.handleOnHoverItem.bind(this);
@@ -533,8 +536,8 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
533
536
  params.accountId = Number(query.account_id);
534
537
  this.getAllTemplates({params});
535
538
  }
536
- }
537
-
539
+ }
540
+
538
541
 
539
542
  if (selectedChannel === "ebill" && nextProps.CreateEbill && nextProps.CreateEbill.createResponse && nextProps.CreateEbill.createResponse.templateId && nextProps.CreateEbill.createResponse.templateId !== '') {
540
543
  const message = `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`;
@@ -659,10 +662,8 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
659
662
  if (weCrmAccountsList?.length && this.state?.defaultAccount && (weCrmChannels.includes(selectedChannel))) {
660
663
  const isSingleAccount = weCrmAccountsList?.length === 1;
661
664
  const selectedAccount = this.props.Templates[ACCOUNT_MAPPING_ON_CHANNEL[selectedChannel]] || {};
662
- console.log("***selectedAccount",this.props.Templates, ACCOUNT_MAPPING_ON_CHANNEL ,selectedAccount, weCrmAccountsList, isSingleAccount);
663
- //check here if isSingleAccount is true then we need to set the hostName to the first account
664
665
  const hostName = this.getHostName(isSingleAccount ? weCrmAccountsList[0]?.sourceAccountIdentifier : selectedAccount?.sourceAccountIdentifier, senderDetails?.domainProperties);
665
- console.log("***hostName", hostName,selectedAccount, isSingleAccount,weCrmAccountsList, isSingleAccount ? weCrmAccountsList[0]?.sourceAccountIdentifier : selectedAccount?.sourceAccountIdentifier, senderDetails?.domainProperties);
666
+
666
667
  if (!isEmpty(hostName)) {
667
668
  const paramsDefault = {};
668
669
  const {name, sourceAccountIdentifier, configs } = weCrmAccountsList?.[0] || {};
@@ -684,7 +685,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
684
685
  paramsDefault.name = this.state.searchText;
685
686
  paramsDefault.sortBy = this.state.sortBy;
686
687
  }
687
- console.log("***paramsDefault", paramsDefault);
688
688
  this.setState({ defaultAccount: false });
689
689
  /**
690
690
  * Incase of multiple accounts, getAllTemplates is called on selecting the account. It's handled in onAccountSelect function.
@@ -697,6 +697,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
697
697
  }
698
698
  const zaloPreviewUrl = get(nextProps, 'Zalo.zaloTemplatePreviewData.versions.base.content.zalo.previewUrl', '');
699
699
  if (zaloPreviewUrl && this.state.channel.toLowerCase() === ZALO_LOWERCASE) {
700
+ this.setState({ zaloPreviewItemId: {} });
700
701
  handlePreviewInNewTab(zaloPreviewUrl);
701
702
  this.props.zaloActions.resetTemplatePreviewData();
702
703
  }
@@ -745,12 +746,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
745
746
  let hostName = '';
746
747
  if (isZaloOrWhatsapp) {
747
748
  hostName = this.getHostName(setAcc?.sourceAccountIdentifier, domainProperties);
748
- if (hostName) {
749
- setAcc.hostName = hostName;
750
- // Ensure the sourceAccountIdentifier is also explicitly set
751
- setAcc.sourceAccountIdentifier = setAcc.sourceAccountIdentifier || '';
752
- // this.setState({ hostName });
753
- }
749
+ setAcc.hostName = hostName;
754
750
  }
755
751
  this.props.actions.setChannelAccount(selectedChannel?.toUpperCase(), setAcc);
756
752
 
@@ -823,13 +819,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
823
819
  creativesParams.whatsappTemplateName = name;
824
820
  creativesParams.whatsappTemplateCategory = get(versions, `base.content.whatsapp.category`, '');
825
821
  creativesParams.whatsappTemplateLanguageCode = get(versions, `base.content.whatsapp.languages[0].language`, '');
826
- // Add source account identifier from selected account
827
- const whatsappAccountDetails = this.getWhatsappAccountDetails();
828
- if (this.props.Templates?.selectedWhatsappAccount) {
829
- creativesParams.sourceAccountIdentifier = this.props.Templates?.selectedWhatsappAccount?.sourceAccountIdentifier;
830
- creativesParams.hostName = this.props.Templates?.selectedWhatsappAccount?.hostName;
831
- }
832
- console.log("***creativesParams", creativesParams, this.props.Templates,whatsappAccountDetails);
833
822
  } else if (this.state.channel.toLocaleLowerCase() === ZALO_LOWERCASE) {
834
823
  const zaloSelectedTemplateData = this.selectTemplate(parseInt(creativesParams._id, 10)) || {};
835
824
  const { name = '' } = zaloSelectedTemplateData;
@@ -842,12 +831,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
842
831
  if (this.state.previewOpen) {
843
832
  creativesParams.mode = 'preview';
844
833
  creativesParams = {...creativesParams, ...this.state.previewTemplate};
845
-
846
- // Add account details for preview mode
847
- if (this.state.channel.toLowerCase() === WHATSAPP_LOWERCASE && this.props.Templates?.selectedWhatsappAccount) {
848
- creativesParams.sourceAccountIdentifier = this.props.Templates.selectedWhatsappAccount.sourceAccountIdentifier;
849
- creativesParams.hostName = this.props.Templates.selectedWhatsappAccount.hostName;
850
- }
851
834
  }
852
835
  return creativesParams;
853
836
  }
@@ -941,7 +924,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
941
924
  }
942
925
  if (
943
926
  this.state.channel.toLowerCase() === ZALO_LOWERCASE &&
944
- !isEmpty(this.props.Templates?.selectedZaloAccount) &&
927
+ !isEmpty(this.props.Templates?.selectedZaloAccount) &&
945
928
  !params?.isAccountSelection && !isEmpty(this.props.Templates?.selectedZaloAccount?.hostName)
946
929
  ) {
947
930
  const {
@@ -1003,7 +986,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1003
986
  default:
1004
987
  return selectedWhatsappCategory === category;
1005
988
  }
1006
- }
989
+ }
1007
990
  return true;
1008
991
  }
1009
992
  filterWhatsappTemplates = (templates) => {
@@ -1093,7 +1076,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1093
1076
  ) : <>{children}</>
1094
1077
  };
1095
1078
 
1096
- getTemplateDataForGrid = ({templates = [], handlers, filterContent, channel, isLoading, loadingTip}) => {
1079
+ getTemplateDataForGrid = ({templates = [], handlers, filterContent, channel, isLoading, loadingTip, previewTemplateId }) => {
1097
1080
  const currentChannel = channel.toUpperCase();
1098
1081
  const {channel: stateChannel} = this.state;
1099
1082
  const channelLowerCase = stateChannel.toLowerCase();
@@ -1125,11 +1108,12 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1125
1108
  ? this.getCreativesEditText(channelLowerCase)
1126
1109
  : messages.selectButton
1127
1110
  );
1128
-
1111
+
1129
1112
  const cardDataList = filteredTemplates && filteredTemplates.length ? map(filteredTemplates, (template) => {
1130
1113
  const androidBodyType = get(template, 'versions.base.content.ANDROID.bodyType');
1131
1114
  const iosBodyType = get(template, 'versions.base.content.IOS.bodyType');
1132
1115
  const inappBodyType = androidBodyType || iosBodyType;
1116
+ const isZaloPreviewLoading = previewTemplateId === template?._id;
1133
1117
  const templateData = {
1134
1118
  key: `${currentChannel}-card-${template?.name}`,
1135
1119
  title: (
@@ -1152,20 +1136,27 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1152
1136
  </span>
1153
1137
  ),
1154
1138
  extra: [
1155
- this.getHoverComponent(
1156
- <CapIcon
1157
- className={`view-${channelLowerCase}`}
1158
- style={{ marginRight: "16px" }}
1159
- type="eye"
1160
- onClick={() => {
1161
- if (!this.props.isFullMode || this.props.isDltFromRcs) {
1162
- this.props.handlePeviewTemplate(template);
1163
- } else {
1164
- handlers.handlePreviewClick(template);
1165
- }
1166
- }}
1167
- />
1168
- ),
1139
+ currentChannel === ZALO && isZaloPreviewLoading ? (
1140
+ <CapSpin style={{ marginRight: "16px", position: "static", display: "inline" }} spinning />
1141
+ ) : (
1142
+ this.getHoverComponent(
1143
+ <CapIcon
1144
+ className={`view-${channelLowerCase}`}
1145
+ style={{ marginRight: "16px" }}
1146
+ type="eye"
1147
+ onClick={() => {
1148
+ if (!this.props.isFullMode || this.props.isDltFromRcs) {
1149
+ if (!get(template, "versions.base.content.zalo.previewUrl", "")) {
1150
+ this.setState({ zaloPreviewItemId: template?._id });
1151
+ }
1152
+ this.props.handlePeviewTemplate(template);
1153
+ } else {
1154
+ handlers.handlePreviewClick(template);
1155
+ }
1156
+ }}
1157
+ />
1158
+ )
1159
+ )
1169
1160
  ],
1170
1161
  hoverOption: (
1171
1162
  <CapButton
@@ -1174,15 +1165,15 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1174
1165
  ? `edit-${channelLowerCase}`
1175
1166
  : `select-${channelLowerCase}`
1176
1167
  }
1177
- onClick={(e) =>
1168
+ onClick={e =>
1178
1169
  handlers.handleEditClick(e, template, undefined, undefined, {
1179
- account: this.state.selectedAccount,
1170
+ account: this.state.selectedAccount
1180
1171
  })
1181
1172
  }
1182
1173
  >
1183
1174
  {hoverButtonText}
1184
1175
  </CapButton>
1185
- ),
1176
+ )
1186
1177
  };
1187
1178
  const {
1188
1179
  versions: {
@@ -1241,7 +1232,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1241
1232
  break;
1242
1233
  }
1243
1234
  case MOBILE_PUSH:
1244
- case INAPP:
1235
+ case INAPP:
1245
1236
  templateData.content = template;
1246
1237
  break;
1247
1238
  case WECHAT:
@@ -2210,21 +2201,26 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
2210
2201
  this.setState({ previewTemplate: templateInfo });
2211
2202
  }
2212
2203
  } else {
2213
- const {
2214
- name = "",
2215
- sourceAccountIdentifier = "",
2216
- configs: { token = "" } = {},
2217
- hostName = "",
2218
- } = get(this.props, "Templates.selectedZaloAccount", {});
2219
- this.props.zaloActions.getTemplateInfoById({
2220
- username: name,
2221
- oa_id: sourceAccountIdentifier,
2222
- token: token,
2223
- host: hostName || this.state.hostName || this.props.Templates?.senderDetails?.hostName,
2224
- id: template?._id,
2225
- preview: true,
2226
- actionCallback: this.actionCallback,
2227
- });
2204
+ if (get(template, "versions.base.content.zalo.previewUrl", "")) {
2205
+ handlePreviewInNewTab(template.versions.base.content.zalo.previewUrl);
2206
+ } else {
2207
+ this.setState({ zaloPreviewItemId: template._id });
2208
+ const {
2209
+ name = "",
2210
+ sourceAccountIdentifier = "",
2211
+ configs: { token = "" } = {},
2212
+ hostName = ""
2213
+ } = get(this.props, "Templates.selectedZaloAccount", {});
2214
+ this.props.zaloActions.getTemplateInfoById({
2215
+ username: name,
2216
+ oa_id: sourceAccountIdentifier,
2217
+ token,
2218
+ host: hostName || this.state.hostName || this.props.Templates?.senderDetails?.hostName,
2219
+ id: template?._id,
2220
+ preview: true,
2221
+ actionCallback: this.actionCallback
2222
+ });
2223
+ }
2228
2224
  }
2229
2225
  }
2230
2226
 
@@ -2917,18 +2913,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
2917
2913
  window.open(`/creatives/ui/v2?channel=${WHATSAPP_LOWERCASE}&mode=${CREATE}`, "_blank");
2918
2914
  }
2919
2915
 
2920
- getWhatsappAccountDetails = () => {
2921
- const { Templates } = this.props;
2922
- const selectedAccount = Templates?.selectedWhatsappAccount || {};
2923
-
2924
- return {
2925
- sourceAccountIdentifier: selectedAccount?.sourceAccountIdentifier || '',
2926
- hostName: selectedAccount?.hostName || this.state.hostName || '',
2927
- accountId: selectedAccount?.id || '',
2928
- name: selectedAccount?.name || ''
2929
- };
2930
- }
2931
-
2932
2916
  render() {
2933
2917
  const isFullMode = this.isFullMode();
2934
2918
  const { activeMode, channel, wechatFilter, lineFilter, smsFilter, templatesCount } = this.state;
@@ -3215,70 +3199,130 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
3215
3199
  return (
3216
3200
  <>
3217
3201
  {activeMode === ACCOUNT_CHANGE_MODE && this.renderAccountSelection()}
3218
- <div className={`creatives-templates-list ${this.props.isFullMode ? 'full-mode' : 'library-mode'}`}>
3219
- <input type="file" id="filename" style={{ display: 'none'}} accept=".zip, .html, .htm" onChange={(event) => this.handleFileUpload(event, {files: event.target.files})} />
3220
-
3221
- {
3222
- channel.toLowerCase() === WHATSAPP_LOWERCASE && showWhatsappCountWarning ? (
3223
- <CapAlert message={whatsappCountExceedText} type="info" />
3224
- ) : null
3225
- }
3202
+ <div
3203
+ className={`creatives-templates-list ${
3204
+ this.props.isFullMode ? "full-mode" : "library-mode"
3205
+ }`}
3206
+ >
3207
+ <input
3208
+ type="file"
3209
+ id="filename"
3210
+ style={{ display: "none" }}
3211
+ accept=".zip, .html, .htm"
3212
+ onChange={event =>
3213
+ this.handleFileUpload(event, { files: event.target.files })
3214
+ }
3215
+ />
3226
3216
 
3227
- {
3228
- channel.toLowerCase() === WHATSAPP_LOWERCASE && !isFullMode ? (
3229
- <CapInfoNote message={formatMessage(messages.whatsappOnlyApprovedTemplates)} />
3230
- ) : null
3231
- }
3217
+ {channel.toLowerCase() === WHATSAPP_LOWERCASE &&
3218
+ showWhatsappCountWarning ? (
3219
+ <CapAlert message={whatsappCountExceedText} type="info" />
3220
+ ) : null}
3232
3221
 
3233
- {
3234
- channel.toLowerCase() === ZALO_LOWERCASE && !isFullMode ? (
3235
- <CapInfoNote message={formatMessage(messages.zaloOnlyApprovedTemplates)} />
3236
- ) : null
3237
- }
3222
+ {channel.toLowerCase() === WHATSAPP_LOWERCASE && !isFullMode ? (
3223
+ <CapInfoNote
3224
+ message={formatMessage(messages.whatsappOnlyApprovedTemplates)}
3225
+ />
3226
+ ) : null}
3238
3227
 
3228
+ {channel.toLowerCase() === ZALO_LOWERCASE && !isFullMode ? (
3229
+ <CapInfoNote
3230
+ message={formatMessage(messages.zaloOnlyApprovedTemplates)}
3231
+ />
3232
+ ) : null}
3239
3233
  <CapRow>
3240
- <Pagination templateInProgress={this.props.Templates.getAllTemplatesInProgress} onPageChange={templates.length ? this.onPaginationChange : () => {}} paginationSelector="pagination-container">
3241
- {this.getTemplateDataForGrid({ isLoading, loadingTip, channel: this.state.channel, templates: this.state.searchingZaloTemplate ? this.state.searchedZaloTemplates : this.props.TemplatesList, filterContent, handlers: { handlePreviewClick: this.handlePreviewClick, handleEditClick: this.handleEditClick}})}
3234
+ <Pagination
3235
+ templateInProgress={
3236
+ this.props.Templates.getAllTemplatesInProgress
3237
+ }
3238
+ onPageChange={
3239
+ templates.length ? this.onPaginationChange : () => {}
3240
+ }
3241
+ paginationSelector="pagination-container"
3242
+ >
3243
+ {this.getTemplateDataForGrid({
3244
+ previewTemplateId: this.state.zaloPreviewItemId,
3245
+ isLoading,
3246
+ loadingTip,
3247
+ channel: this.state.channel,
3248
+ templates: this.state.searchingZaloTemplate
3249
+ ? this.state.searchedZaloTemplates
3250
+ : this.props.TemplatesList,
3251
+ filterContent,
3252
+ handlers: {
3253
+ handlePreviewClick: this.handlePreviewClick,
3254
+ handleEditClick: this.handleEditClick
3255
+ }
3256
+ })}
3242
3257
  </Pagination>
3243
- {showNoTemplatesFound &&
3244
- <div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh'}}>
3245
- <CapHeading type="h6">{this.props.intl.formatMessage(messages.noTemplatesFound)}</CapHeading>
3246
- </div>}
3258
+ {showNoTemplatesFound && (
3259
+ <div
3260
+ style={{
3261
+ height: "65vh",
3262
+ textAlign: "center",
3263
+ lineHeight: "65vh"
3264
+ }}
3265
+ >
3266
+ <CapHeading type="h6">
3267
+ {this.props.intl.formatMessage(messages.noTemplatesFound)}
3268
+ </CapHeading>
3269
+ </div>
3270
+ )}
3247
3271
  </CapRow>
3248
3272
 
3249
-
3250
3273
  <CapRow>
3251
- {!isEmpty(creativesParams.mode) && isFullMode && //creatives container for fullmode
3252
- <CreativesContainer
3253
- key={creativesParams.mode}
3254
- messageDetails={{type: "default"}}
3255
- creativesMode={creativesParams.mode}
3256
- messages={messages}
3257
- isFullMode={isFullMode}
3258
- templateData={creativesParams}
3259
- getCreativesData={() => { this.onCreateComplete(true); }}
3260
- channel={route.name.toUpperCase()}
3261
- handleCloseCreatives={this.onCreateComplete}
3262
- selectedWeChatAccount={get(this.props, 'Templates.selectedWeChatAccount', {})}
3263
- selectedAccount={this.state.selectedAccount}
3264
- />
3265
- }
3274
+ {!isEmpty(creativesParams.mode) &&
3275
+ isFullMode && ( //creatives container for fullmode
3276
+ <CreativesContainer
3277
+ key={creativesParams.mode}
3278
+ messageDetails={{ type: "default" }}
3279
+ creativesMode={creativesParams.mode}
3280
+ messages={messages}
3281
+ isFullMode={isFullMode}
3282
+ templateData={creativesParams}
3283
+ getCreativesData={() => {
3284
+ this.onCreateComplete(true);
3285
+ }}
3286
+ channel={route.name.toUpperCase()}
3287
+ handleCloseCreatives={this.onCreateComplete}
3288
+ selectedWeChatAccount={get(
3289
+ this.props,
3290
+ "Templates.selectedWeChatAccount",
3291
+ {}
3292
+ )}
3293
+ selectedAccount={this.state.selectedAccount}
3294
+ />
3295
+ )}
3266
3296
  </CapRow>
3267
3297
  <CapRow>
3268
-
3269
- {(this.state.channel.toLowerCase() === 'ebill' || this.state.channel.toLowerCase() === 'email') && htmlPreviewContent && <EmailPreview
3270
- header={previewHeader}
3271
- content={htmlPreviewContent}
3272
- show={this.state.showHtmlPreview}
3273
- device={this.state.device}
3274
- handleClose={this.toggleEmailPreview}
3275
- changePreviewDevice={this.changePreviewDevice}
3276
- versions={get(this.state, 'previewTemplate.versions', {})}
3277
- lastModified={this.state.previewTemplate ? this.state.previewTemplate.updatedAt : ''}
3278
- updatedByName={commonUtil.getUserNameById(parseInt(this.state.previewTemplate.updatedBy, 10), commonUtil.getMergedUserList(this.props.Templates.userList))}
3279
- />}
3298
+ {(this.state.channel.toLowerCase() === "ebill" ||
3299
+ this.state.channel.toLowerCase() === "email") &&
3300
+ htmlPreviewContent && (
3301
+ <EmailPreview
3302
+ header={previewHeader}
3303
+ content={htmlPreviewContent}
3304
+ show={this.state.showHtmlPreview}
3305
+ device={this.state.device}
3306
+ handleClose={this.toggleEmailPreview}
3307
+ changePreviewDevice={this.changePreviewDevice}
3308
+ versions={get(this.state, "previewTemplate.versions", {})}
3309
+ lastModified={
3310
+ this.state.previewTemplate
3311
+ ? this.state.previewTemplate.updatedAt
3312
+ : ""
3313
+ }
3314
+ updatedByName={commonUtil.getUserNameById(
3315
+ parseInt(this.state.previewTemplate.updatedBy, 10),
3316
+ commonUtil.getMergedUserList(this.props.Templates.userList)
3317
+ )}
3318
+ />
3319
+ )}
3280
3320
  <CapSlideBox
3281
- header={(<h3>{this.props.intl.formatMessage(messages.layoutSelection)}</h3>)}
3321
+ header={
3322
+ <h3>
3323
+ {this.props.intl.formatMessage(messages.layoutSelection)}
3324
+ </h3>
3325
+ }
3282
3326
  width={60}
3283
3327
  content={cmsTemplateSelectionContent}
3284
3328
  show={this.state.showEdmEmailTemplates}
@@ -3288,7 +3332,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
3288
3332
  />
3289
3333
  {this.renderDeleteConfirmationModal()}
3290
3334
  </CapRow>
3291
-
3292
3335
  </div>
3293
3336
  </>
3294
3337
  );
@@ -7,6 +7,8 @@ import * as Api from '../../services/api';
7
7
  import * as types from './constants';
8
8
  import { saveCdnConfigs, removeAllCdnLocalStorageItems } from '../../utils/cdnTransformation';
9
9
  import { COPY_OF } from '../../containers/App/constants';
10
+ import { ZALO_TEMPLATE_INFO_REQUEST } from '../Zalo/constants';
11
+ import { getTemplateInfoById } from '../Zalo/saga';
10
12
  // Individual exports for testing
11
13
  export function* getAllTemplates(channel, queryParams) {
12
14
  try {
@@ -221,6 +223,10 @@ export function* watchGetCdnTransformationConfig() {
221
223
  );
222
224
  }
223
225
 
226
+ export function* watchForGetTemplateInfoById() {
227
+ yield takeLatest(ZALO_TEMPLATE_INFO_REQUEST, getTemplateInfoById);
228
+ }
229
+
224
230
  // All sagas to be loaded
225
231
  export default [
226
232
  watchGetAllTemplates,
@@ -245,6 +251,7 @@ export function* v2TemplateSaga() {
245
251
  watchGetCdnTransformationConfig(),
246
252
  watchFetchWeCrmAccounts(),
247
253
  watchGetSenderDetails(),
254
+ watchForGetTemplateInfoById(),
248
255
  ]);
249
256
  }
250
257