@capillarytech/creatives-library 3.9.21 → 3.10.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 (85) hide show
  1. package/components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +7 -7
  2. package/components/TemplatePreview/_templatePreview.scss +20 -287
  3. package/components/TemplatePreview/index.js +31 -203
  4. package/components/TemplatePreview/messages.js +0 -21
  5. package/containers/Assets/Gallery/index.js +59 -53
  6. package/containers/Cap/index.js +0 -1
  7. package/index.js +0 -6
  8. package/package.json +1 -1
  9. package/routes.js +0 -5
  10. package/services/getSchema.js +1 -4
  11. package/translations/en.json +1 -29
  12. package/translations/zh.json +1 -29
  13. package/v2Components/FormBuilder/index.js +37 -188
  14. package/v2Components/FormBuilder/messages.js +0 -16
  15. package/v2Components/MobilePushPreviewV2/index.js +36 -44
  16. package/v2Components/MobilePushPreviewV2/messages.js +8 -0
  17. package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/_wechatRichmediaTemplatePrev.scss +0 -64
  18. package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +18 -100
  19. package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/messages.js +0 -12
  20. package/v2Components/TemplatePreview/_templatePreview.scss +4 -24
  21. package/v2Components/TemplatePreview/index.js +23 -162
  22. package/v2Components/TemplatePreview/messages.js +0 -8
  23. package/v2Containers/Assets/Gallery/index.js +48 -54
  24. package/v2Containers/CreativesContainer/SlideBoxContent.js +4 -87
  25. package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -1
  26. package/v2Containers/CreativesContainer/index.js +2 -58
  27. package/v2Containers/CreativesContainer/messages.js +2 -2
  28. package/v2Containers/Email/_email.scss +1 -7
  29. package/v2Containers/Email/index.js +14 -40
  30. package/v2Containers/Email/messages.js +0 -4
  31. package/v2Containers/Email/reducer.js +0 -1
  32. package/v2Containers/EmailWrapper/index.js +5 -7
  33. package/v2Containers/Line/Create/_lineCreate.scss +19 -40
  34. package/v2Containers/Line/Create/actions.js +9 -13
  35. package/v2Containers/Line/Create/index.js +237 -498
  36. package/v2Containers/Line/Create/messages.js +2 -42
  37. package/v2Containers/Line/Create/sagas.js +4 -10
  38. package/v2Containers/Line/Create/selectors.js +9 -3
  39. package/v2Containers/MobilePush/Create/index.js +0 -5
  40. package/v2Containers/MobilePush/Edit/index.js +0 -5
  41. package/v2Containers/MobilepushWrapper/index.js +1 -4
  42. package/v2Containers/Sms/Create/index.js +1 -2
  43. package/v2Containers/Sms/Edit/index.js +0 -2
  44. package/v2Containers/Templates/_templates.scss +1 -24
  45. package/v2Containers/Templates/actions.js +0 -7
  46. package/v2Containers/Templates/constants.js +0 -2
  47. package/v2Containers/Templates/index.js +15 -118
  48. package/v2Containers/Templates/messages.js +0 -8
  49. package/v2Containers/Templates/reducer.js +0 -2
  50. package/v2Containers/TemplatesV2/index.js +4 -5
  51. package/v2Containers/TemplatesV2/messages.js +0 -4
  52. package/assets/IPad.js +0 -23
  53. package/assets/index.js +0 -1
  54. package/assets/lineImageTemplate.png +0 -0
  55. package/components/TemplatePreview/assets/images/HomeScreenAndroid.js +0 -53
  56. package/components/TemplatePreview/assets/images/SmsMobileAndroid.js +0 -52
  57. package/components/TemplatePreview/assets/images/SmsMobileIos.js +0 -71
  58. package/components/TemplatePreview/assets/images/UserIcon.js +0 -24
  59. package/components/TemplatePreview/assets/images/WechatMobileAndroid.js +0 -53
  60. package/components/TemplatePreview/assets/images/home-screen-android.svg +0 -21
  61. package/components/TemplatePreview/assets/images/home-screen-ios.svg +0 -16
  62. package/components/TemplatePreview/assets/images/sms_mobile_android.svg +0 -22
  63. package/components/TemplatePreview/assets/images/sms_mobile_ios.svg +0 -16
  64. package/components/TemplatePreview/assets/images/wechat_mobile_android.svg +0 -20
  65. package/v2Components/TemplatePreview/assets/images/HomeScreenAndroid.js +0 -53
  66. package/v2Components/TemplatePreview/assets/images/SmsMobileAndroid.js +0 -52
  67. package/v2Components/TemplatePreview/assets/images/UserIcon.js +0 -24
  68. package/v2Components/TemplatePreview/assets/images/WechatHomeScreenAndroid.js +0 -74
  69. package/v2Components/TemplatePreview/assets/images/WechatMobileAndroid.js +0 -53
  70. package/v2Components/TemplatePreview/assets/images/home-screen-android.svg +0 -21
  71. package/v2Components/TemplatePreview/assets/images/home-screen-ios.svg +0 -16
  72. package/v2Components/TemplatePreview/assets/images/sms_mobile_android.svg +0 -22
  73. package/v2Components/TemplatePreview/assets/images/wechat-home-screen-android.svg +0 -21
  74. package/v2Components/TemplatePreview/assets/images/wechat_mobile_android.svg +0 -20
  75. package/v2Containers/Assets/images/CalltaskIllustration.js +0 -71
  76. package/v2Containers/Assets/images/EmailIllustration.js +0 -87
  77. package/v2Containers/Assets/images/ImageGalleryIllustration.js +0 -60
  78. package/v2Containers/Assets/images/PushIllustration.js +0 -60
  79. package/v2Containers/Assets/images/SmsIllustration.js +0 -191
  80. package/v2Containers/Assets/images/WechatIllustration.js +0 -90
  81. package/v2Containers/Assets/images/index.js +0 -6
  82. package/v2Containers/Line/Create/initialSchema.js +0 -378
  83. package/v2Containers/Line/CreateWrapper/constants.js +0 -2
  84. package/v2Containers/Line/CreateWrapper/index.js +0 -117
  85. package/v2Containers/Line/CreateWrapper/messages.js +0 -55
@@ -10,114 +10,17 @@ import React from 'react';
10
10
  import _ from 'lodash';
11
11
  import { injectIntl, FormattedMessage, intlShape } from 'react-intl';
12
12
  // import styled from 'styled-components';
13
- import {CapColumn, CapRow, CapHeading, CapIcon, CapButton, CapImage} from '@capillarytech/cap-ui-library';
13
+ import {CapColumn, CapRow, CapHeading} from '@capillarytech/cap-ui-library';
14
14
  import './_templatePreview.scss';
15
15
  import {updateCharCount} from '../../utils/smsCharCountV2';
16
16
  import messages from './messages';
17
- import { WECHAT } from '../../v2Containers/CreativesContainer/constants';
18
- const wechatBodyNew = require('./assets/images/wechat_mobile_android.svg');
19
- const smsMobileAndroid = require('./assets/images/sms_mobile_android.svg');
17
+ const smsIcon = require('./assets/images/user-icon.svg');
18
+ const wechatBody = require('./assets/images/WECHAT_5x.png');
19
+ const smsBody = require('./assets/images/mobile.svg');
20
20
  const androidPushMessagePhone = require('./assets/images/androidPushMessage.svg');
21
21
  const iPhonePushMessagePhone = require('./assets/images/iPhonePushMessage.svg');
22
22
 
23
23
  class TemplatePreview extends React.Component { // eslint-disable-line react/prefer-stateless-function
24
- onPreviewContentClicked = (channel) => {
25
- const IOSContent = (this.props.templateDataRaw && this.props.templateDataRaw.versions.base.IOS) ||
26
- ((this.props.device === 'iphone' || this.props.device === 'ios') && this.props.content);
27
- const ANDROIDContent = (this.props.templateDataRaw && this.props.templateDataRaw.versions.base.ANDROID) ||
28
- (this.props.device === 'android' && this.props.content);
29
- const mobilePushPreviewContent = [];
30
- if (this.props.channel === 'MOBILEPUSH') {
31
- const previewObj = {
32
- channel: this.props.channel,
33
- accountId: this.props.templateDataRaw && this.props.templateDataRaw.definition.accountId,
34
- messageSubject: this.props.templateDataRaw && this.props.templateDataRaw.name,
35
- id: 'message_content_id_1',
36
- };
37
- if (IOSContent) {
38
- previewObj.iosContent = {
39
- title: IOSContent.title || IOSContent.header,
40
- message: IOSContent.message || IOSContent.bodyText,
41
- deviceType: "IOS",
42
- expandableDetails: IOSContent.expandableDetails ||
43
- {
44
- style: "BIG_PICTURE",
45
- image: this.props.content.bodyImage,
46
- message: this.props.content.bodyText,
47
- },
48
- };
49
- }
50
- if (ANDROIDContent) {
51
- previewObj.androidContent = {
52
- title: ANDROIDContent.title || ANDROIDContent.header,
53
- message: ANDROIDContent.message || ANDROIDContent.bodyText,
54
- deviceType: "ANDROID",
55
- expandableDetails: ANDROIDContent.expandableDetails ||
56
- {
57
- style: "BIG_PICTURE",
58
- image: this.props.content.bodyImage,
59
- message: this.props.content.bodyText,
60
- },
61
- };
62
- }
63
- mobilePushPreviewContent.push(previewObj);
64
- }
65
- const previewContent = this.props.channel === 'MOBILEPUSH' ? mobilePushPreviewContent : this.props.content;
66
- const params = {
67
- content: previewContent,
68
- channel,
69
- };
70
- this.props.onPreviewContentClicked(params);
71
- };
72
-
73
- onTestContentClicked = (channel) => {
74
- let mobilePushPreviewContent = {};
75
- const IOSContent = (this.props.templateDataRaw && this.props.templateDataRaw.versions.base.IOS) ||
76
- ((this.props.device === 'iphone' || this.props.device === 'ios') && this.props.content);
77
- const ANDROIDContent = (this.props.templateDataRaw && this.props.templateDataRaw.versions.base.ANDROID) ||
78
- (this.props.device === 'android' && this.props.content);
79
- if (this.props.channel === 'MOBILEPUSH') {
80
- mobilePushPreviewContent = {
81
- channel: this.props.channel,
82
- accountId: this.props.templateDataRaw && this.props.templateDataRaw.definition.accountId,
83
- messageSubject: this.props.templateDataRaw && this.props.templateDataRaw.name,
84
- id: 'message_content_id_1',
85
- };
86
- if (ANDROIDContent) {
87
- mobilePushPreviewContent.androidContent = {
88
- title: ANDROIDContent.title || ANDROIDContent.header,
89
- message: ANDROIDContent.message || ANDROIDContent.bodyText,
90
- deviceType: "ANDROID",
91
- expandableDetails: ANDROIDContent.expandableDetails ||
92
- {
93
- style: "BIG_PICTURE",
94
- image: this.props.content.bodyImage,
95
- message: this.props.content.bodyText,
96
- },
97
- };
98
- }
99
- if (IOSContent) {
100
- mobilePushPreviewContent.iosContent = {
101
- title: IOSContent.title || IOSContent.header,
102
- message: IOSContent.message || IOSContent.bodyText,
103
- deviceType: "IOS",
104
- expandableDetails: IOSContent.expandableDetails ||
105
- {
106
- style: "BIG_PICTURE",
107
- image: this.props.content.bodyImage,
108
- message: this.props.content.bodyText,
109
- },
110
- };
111
- }
112
- }
113
- const previewContent = this.props.channel === 'MOBILEPUSH' ? mobilePushPreviewContent : this.props.content;
114
- const params = {
115
- content: previewContent,
116
- channel,
117
- };
118
- this.props.onTestContentClicked(params);
119
- };
120
-
121
24
  render() {
122
25
  let content = channel && channel.toLowerCase() === 'sms' ? [this.props.content] : this.props.content;
123
26
  const channel = this.props.channel;
@@ -147,7 +50,6 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
147
50
  return undefined;
148
51
  });
149
52
  }
150
- const disablePreviewAndTest = this.props.channel === 'MOBILEPUSH' ? !this.props.content.header : (this.props.channel === 'SMS' ? !this.props.content : false);
151
53
  return (
152
54
  <CapRow>
153
55
  {this.props.showCount && <CapColumn span={16}>
@@ -162,45 +64,16 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
162
64
  </CapHeading>}
163
65
  </CapColumn>}
164
66
  <CapColumn span={this.props.showCount ? 8 : 24}>
165
- {this.props.showTestAndPreviewIcon && this.props.channel !== WECHAT && (
166
- <div className="test-and-preview-container">
167
- <CapButton
168
- style={{
169
- color: '#2466ea',
170
- display: 'inline-block',
171
- padding: '0 6px',
172
- marginTop: '12px',
173
- }}
174
- type="flat"
175
- onClick={() => this.onPreviewContentClicked(this.props.channel)}
176
- disabled={disablePreviewAndTest}
177
- >
178
- <CapIcon type="eye"/><FormattedMessage {...messages.preview} />
179
- </CapButton>
180
- <CapButton
181
- style={{
182
- color: '#2466ea',
183
- display: 'inline-block',
184
- padding: '0 6px',
185
- marginTop: '12px',
186
- }}
187
- type="flat"
188
- onClick={() => this.onTestContentClicked(this.props.channel)}
189
- disabled={disablePreviewAndTest}
190
- >
191
- <CapIcon type="lab"/><FormattedMessage {...messages.testMessage} />
192
- </CapButton>
193
- </div>
194
- )}
195
67
  <div className={`preview-container ${type === 'embedded' ? 'embedded-preview' : ''}`}>
196
68
  { channel && channel.toLowerCase() === 'sms' &&
197
69
  <div>
198
- <div className="shell-v2 align-center" id="sms-preview">
199
- <CapImage className="preview-image sms" src={smsMobileAndroid} alt="Preview is being generated"/>
70
+ <div className="shell align-center" id="sms-preview">
71
+ <img className="preview-image sms" src={smsBody} alt="Preview is being generated"/>
200
72
  <div className="msgContainer sms">
73
+ <img className="sms-icon" src={smsIcon} alt="Sms icon" />
201
74
  <div className={"message-pop sms"}>
202
75
  {content && content.length && content.map((msg, index) =>
203
- <CapColumn key={`"message-pop-content-${index}`} className="message-pop-item align-left" style={{ background: '#FFFFFF', color: '#091e42'}}>
76
+ <CapColumn key={`"message-pop-content-${index}`} className="message-pop-item align-left" style={{ background: '#3F51B5', color: '#ffffff'}}>
204
77
  {msg}
205
78
  </CapColumn>)
206
79
  }
@@ -223,9 +96,10 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
223
96
  </div>
224
97
  }
225
98
  {channel && channel.toLowerCase() === 'wechat' ?
226
- ( <div className="shell-v2 align-center" id="sms-preview">
227
- <CapImage className="preview-image" src={channel.toLowerCase() === 'wechat' ? wechatBodyNew : smsMobileAndroid} alt="Preview is being generated"/>
228
- <div className="msgContainer wechat">
99
+ ( <div className="shell align-center" id="sms-preview">
100
+ <img className="preview-image" src={channel.toLowerCase() === 'wechat' ? wechatBody : smsBody} alt="Preview is being generated"/>
101
+ <div className="msgContainer">
102
+ {this.props.channel.toLowerCase() === 'wechat' ? <div className="sms-icon" style={{ width: '25px', height: '25px', background: '#2E89DF' }}></div> : <img className="sms-icon" src={smsIcon} alt={this.props.intl.formatMessage(messages.smsIcon)} />}
229
103
  <div className="message-pop align-left" style={{ background: `${this.props.channel.toLowerCase() === 'wechat' ? '#ffffff' : '#3F51B5'}`, color: `${this.props.channel.toLowerCase() === 'wechat' ? '#333333' : '#ffffff'}`}}>{content}
230
104
  </div>
231
105
  </div>
@@ -233,10 +107,10 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
233
107
  ) : ''
234
108
  }
235
109
  { channel && (channel.toLowerCase() === 'mobilepush') &&
236
- (<div className="shell-v2 align-center" id="mobilepush-preview">
237
- <CapImage className="preview-image" src={this.props.device === "android" ? androidPushMessagePhone : iPhonePushMessagePhone} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
110
+ (<div className="shell align-center" id="mobilepush-preview">
111
+ <img className="preview-image" src={this.props.device === "android" ? androidPushMessagePhone : iPhonePushMessagePhone} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
238
112
  {(!!content.header || !!content.bodyText || !!content.bodyImage) &&
239
- <div className={`${this.props.device === 'ios' ? 'iphone' : this.props.device}-push-message-Container`}>
113
+ <div className={`${this.props.device}-push-message-Container`}>
240
114
  {this.props.device === "android" ?
241
115
  <div className="message-pop align-left">
242
116
  <div className="app-name">
@@ -249,7 +123,7 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
249
123
  {content.bodyText}
250
124
  </div>
251
125
  {content.bodyImage && <div className="body-image">
252
- <CapImage src={content.bodyImage} alt="" />
126
+ <img src={content.bodyImage} alt="" />
253
127
  </div>}
254
128
  {content.actions.filter((action) => action.label).length ?
255
129
  <div className="actions">
@@ -264,7 +138,7 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
264
138
  <span className="app-icon"></span>{content.appName ? content.appName : "App name"} <i className="material-icons">{this.props.intl.formatMessage(messages.close)}</i>
265
139
  </div>
266
140
  {content.bodyImage && <div className="body-image">
267
- <CapImage src={content.bodyImage} alt=""/>
141
+ <img src={content.bodyImage} alt=""/>
268
142
  </div>}
269
143
  <div className="title">
270
144
  {content.header}
@@ -282,22 +156,13 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
282
156
  }
283
157
  {
284
158
  channel && channel.toLowerCase() === 'line' ? (
285
- <div className="shell-v2 align-center" id="sms-preview">
286
- <CapImage className="preview-image" src={wechatBodyNew} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
287
- <div className="msgContainer line-preview">
288
- <div className="sms-icon" style={{ left: 10, borderRadius: '50%', width: '20px', height: '20px', background: '#2E89DF' }}></div>
159
+ <div className="shell align-center" id="sms-preview">
160
+ <img className="preview-image" src={wechatBody} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
161
+ <div className="msgContainer">
162
+ <div className="sms-icon" style={{ width: '25px', height: '25px', background: '#2E89DF' }}></div>
289
163
  <div className="message-pop align-left" style={{ background: '#ffffff', color: '#333333' }}>
290
- {
291
- content && Object.keys(content).map((item) => {
292
- if (item === 'bodyText' && content[item]) {
293
- return content[item];
294
- }
295
- if (item === 'bodyImage' && content[item]) {
296
- return <CapImage src={content[item]} alt="brand-name" style={{maxWidth: '100%'}}/>;
297
- }
298
- return null;
299
- })
300
- }
164
+ { (content && content.bodyImage) ? <img src={content.bodyImage} alt="ddd" style={{maxWidth: '100%'}}/> : '' }
165
+ { (content && content.bodyText) ? content.bodyText : ''}
301
166
  </div>
302
167
  </div>
303
168
  { (content && content.bodyText) ? <p style={{fontSize: 16, fontWeight: "bold"}}>Chars Count: {content.bodyText.length} / (1600)</p> : '' }
@@ -324,10 +189,6 @@ TemplatePreview.propTypes = {
324
189
  unicodeEnabled: PropTypes.bool,
325
190
  showCount: PropTypes.bool,
326
191
  intl: intlShape.isRequired,
327
- templateDataRaw: PropTypes.object,
328
- onPreviewContentClicked: PropTypes.func,
329
- onTestContentClicked: PropTypes.func,
330
- showTestAndPreviewIcon: PropTypes.bool,
331
192
  };
332
193
 
333
194
  export default (injectIntl(TemplatePreview));
@@ -50,12 +50,4 @@ export default defineMessages({
50
50
  id: 'creatives.componentsV2.TemplatePreview.smsIcon',
51
51
  defaultMessage: 'Sms Icon',
52
52
  },
53
- preview: {
54
- id: 'creatives.componentsV2.TemplatePreview.preview',
55
- defaultMessage: 'Preview',
56
- },
57
- testMessage: {
58
- id: 'creatives.componentsV2.TemplatePreview.testMessage',
59
- defaultMessage: 'Test Message',
60
- },
61
53
  });
@@ -81,7 +81,7 @@ export class Gallery extends React.Component { // eslint-disable-line react/pref
81
81
  const params = {
82
82
  name: this.state.searchText,
83
83
  };
84
- this.getAllAssets({params, resetPage: true});
84
+ this.getAllAssets({params});
85
85
  }
86
86
  if (!this.props.Gallery.fetchingAllAssets && !_.isEmpty(this.props.Gallery.assetList) && this.props.Gallery.assetList[0] && this.props.Gallery.assetList[0].totalCount && this.state.totalCount === 0) {
87
87
  this.setState({totalCount: this.props.Gallery.assetList[0].totalCount});
@@ -98,12 +98,19 @@ export class Gallery extends React.Component { // eslint-disable-line react/pref
98
98
  name: this.state.searchText,
99
99
  sortBy: 'Most Recent',
100
100
  };
101
- this.getAllAssets({params, resetPage: true});
101
+ this.getAllAssets({params});
102
102
  }
103
103
  if (!nextProps.Gallery.deletingAsset && nextProps.Gallery.assetDeleteError && !_.isEqual(nextProps.Gallery.deletingAsset, this.props.Gallery.deletingAsset)) {
104
104
  const message = getMessageObject('error', this.props.intl.formatMessage(messages.assetDeleteFailed), true);
105
105
  this.props.globalActions.addMessageToQueue(message);
106
106
  }
107
+ if ( nextProps.Gallery.itemDeleted || !nextProps.Gallery.assetUploading) {
108
+ const params = {
109
+ name: this.state.searchText,
110
+ sortBy: 'Most Recent',
111
+ };
112
+ this.getAllAssets({params}, true);
113
+ }
107
114
  }
108
115
 
109
116
  componentWillUnmount() {
@@ -229,20 +236,18 @@ export class Gallery extends React.Component { // eslint-disable-line react/pref
229
236
  uploadImages(e, {files}) {
230
237
  e.preventDefault();
231
238
  const _URL = window.URL || window.webkitURL;
239
+ //const file = files[0];
232
240
  for (const file in files) {
233
- if (files.hasOwnProperty(file)) {
234
- const img = new Image();
235
- const that = this;
236
- img.src = _URL.createObjectURL(files[file]);
237
- img.onload = function () {
238
- const fileParams = {
239
- width: this.width,
240
- height: this.height,
241
- isGeneratePreview: true,
242
- };
243
- that.props.actions.uploadAsset(files[file], 'image', fileParams);
241
+ const img = new Image();
242
+ const that = this;
243
+ img.src = _URL.createObjectURL(files[file]);
244
+ img.onload = function () {
245
+ const fileParams = {
246
+ width: this.width,
247
+ height: this.height,
244
248
  };
245
- }
249
+ that.props.actions.uploadAsset(files[file], 'image', fileParams);
250
+ };
246
251
  }
247
252
  }
248
253
  getIllustrationProps={
@@ -311,34 +316,29 @@ export class Gallery extends React.Component { // eslint-disable-line react/pref
311
316
  {
312
317
  key: `${currentChannel}-card-${template.name}`,
313
318
  title: <span title={template.name} >{template.name}</span>,
319
+ extra: [
320
+ <CapIcon
321
+ className="view-gallery"
322
+ style={{marginRight: '16px'}}
323
+ type="eye"
324
+ onClick={() => { this.openPreviewMode(template); }}
325
+ />,
326
+ <CapDropdown
327
+ overlay={
328
+ <CapMenu>
329
+ <CapMenu.Item className="delete-gallery" onClick={() => this.deleteAsset(template)}>
330
+ <FormattedMessage {...messages.delete} />
331
+ </CapMenu.Item>
332
+ </CapMenu>
333
+ }
334
+ >
335
+ <CapIcon type="more" />
336
+ </CapDropdown>,
337
+ ],
314
338
  };
315
- if (!this.props.isLineAsset) {
316
- templateData.extra = [
317
- <CapIcon
318
- className="view-gallery"
319
- style={{marginRight: '16px'}}
320
- type="eye"
321
- onClick={() => { this.openPreviewMode(template); }}
322
- />,
323
- <CapDropdown
324
- overlay={
325
- <CapMenu>
326
- <CapMenu.Item className="delete-gallery" onClick={() => this.deleteAsset(template)}>
327
- <FormattedMessage {...messages.delete} />
328
- </CapMenu.Item>
329
- </CapMenu>
330
- }
331
- >
332
- <CapIcon type="more" />
333
- </CapDropdown>,
334
- ];
335
- }
336
339
  if (!this.props.isFullMode) {
337
340
  templateData.hoverOption = <CapButton onClick={(e) => handlers.selectAsset(e, template._id)}><FormattedMessage {...messages.select} /></CapButton>;
338
341
  }
339
- if (this.props.isLineAsset) {
340
- templateData.hoverOption = <CapButton onClick={() => this.props.onGalleryImageSelect(template)}><FormattedMessage {...messages.select} /></CapButton>;
341
- }
342
342
  const secureFilePath = _.get(template, 'metaInfo.secure_file_path');
343
343
  templateData.url = secureFilePath || _.get(template, 'metaInfo.public_url');
344
344
  return templateData;
@@ -347,7 +347,7 @@ export class Gallery extends React.Component { // eslint-disable-line react/pref
347
347
  {filterContent}
348
348
  <CapSpin spinning={isLoading} tip={loadingTip} style={{width: "100%"}}>
349
349
  {!isLoading && <div>
350
- {!_.isEmpty(templates) || !_.isEmpty(searchText) ? <div className={`pagination-container ${this.props.isLineAsset ? 'gallery-upload' : ''}`}>
350
+ {!_.isEmpty(templates) || !_.isEmpty(searchText) ? <div className="pagination-container">
351
351
  <CapCustomCardList key={`${currentChannel}-card-list`} cardList={cardDataList} type={'Email'} />
352
352
  {!_.isEmpty(searchText) && _.isEmpty(templates) && (
353
353
  <div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh'}}>
@@ -421,25 +421,21 @@ export class Gallery extends React.Component { // eslint-disable-line react/pref
421
421
  <div style={{ marginTop: '8px', width: '50%'}}>
422
422
  <CapInput.Search
423
423
  className="search-text"
424
- style={{width: `${this.props.isLineAsset ? '324px' : '210px'}`}}
424
+ style={{width: '210px'}}
425
425
  placeholder={this.props.intl.formatMessage(messages.search)}
426
426
  value={this.state.searchText}
427
427
  onChange={(e) => this.searchAsset(e.target.value)}
428
428
  onClear={() => this.searchAsset('')}
429
429
  />
430
430
  </div>
431
- {
432
- !this.props.isLineAsset && (
433
- <div style={{ textAlign: 'right', marginTop: '16px', width: '50%'}}>
434
- <form encType="multipart/form-data" id="myForm">
435
- <input style={{ display: 'none'}} id="fileName" type="file" onChange={(e) => this.uploadImages(e, {files: e.target.files})} accept="image/*" multiple/>
436
- <CapButton className="upload-image-gallery" type={this.props.location.query.type !== 'embedded' ? 'primary' : 'secondary'} onClick={(e) => this.openFileDialog(e)} style={{float: 'right'}}>
437
- <FormattedMessage {...messages.upload} />
438
- </CapButton>
439
- </form>
440
- </div>
441
- )
442
- }
431
+ <div style={{ textAlign: 'right', marginTop: '16px', width: '50%'}}>
432
+ <form encType="multipart/form-data" id="myForm">
433
+ <input style={{ display: 'none'}} id="fileName" type="file" onChange={(e) => this.uploadImages(e, {files: e.target.files})} accept="image/*" multiple/>
434
+ <CapButton className="upload-image-gallery" type={this.props.location.query.type !== 'embedded' ? 'primary' : 'secondary'} onClick={(e) => this.openFileDialog(e)} style={{float: 'right'}}>
435
+ <FormattedMessage {...messages.upload} />
436
+ </CapButton>
437
+ </form>
438
+ </div>
443
439
  </div>
444
440
  ) : <input style={{ display: 'none'}} id="fileName" type="file" onChange={(e) => this.uploadImages(e, {files: e.target.files})} accept="image/*" multiple/>;
445
441
  const isLoading = this.props.Gallery.assetUploading || this.props.Gallery.fetchingAllAssets;
@@ -500,8 +496,6 @@ Gallery.propTypes = {
500
496
  location: PropTypes.object,
501
497
  intl: intlShape.isRequired,
502
498
  isFullMode: PropTypes.bool,
503
- isLineAsset: PropTypes.bool,
504
- onGalleryImageSelect: PropTypes.func,
505
499
  };
506
500
 
507
501
  const mapStateToProps = createStructuredSelector({
@@ -11,14 +11,12 @@ import EmailWrapper from '../EmailWrapper';
11
11
  import MobilepushWrapper from '../MobilepushWrapper';
12
12
  import EmailPreviewV2 from '../../v2Components/EmailPreviewV2';
13
13
  import MobilePushPreview from '../../v2Components/MobilePushPreviewV2';
14
- import LineEdit from '../Line/Create';
15
14
  import WechatWrapper from '../WeChat/Wrapper';
16
15
  import Facebook from '../Facebook';
17
16
  import { RICH_MEDIA, MAP_TEMPLATE, CREATE } from '../WeChat/Wrapper/constants';
18
17
  import CallTask from '../CallTask';
19
18
  import MobliPushEdit from '../MobilePush/Edit';
20
19
  import * as constants from './constants';
21
- import CreateLineWrapper from '../Line/CreateWrapper';
22
20
  const CreativesWrapper = styled.div`
23
21
  .ant-popover,
24
22
  .ant-notification,
@@ -43,7 +41,6 @@ function SlideBoxContent(props) {
43
41
  location,
44
42
  isGetFormData,
45
43
  getFormData,
46
- onCreateComplete,
47
44
  messageDetails,
48
45
  onCreateNew,
49
46
  currentChannel,
@@ -72,11 +69,7 @@ function SlideBoxContent(props) {
72
69
  selectedWeChatAccount,
73
70
  weChatMaptemplateStep,
74
71
  onWeChatMaptemplateStepChange,
75
- onTestContentClicked,
76
- onPreviewContentClicked,
77
72
  onFacebookSubmit,
78
- saveMessage,
79
- selectedAccount,
80
73
  } = props;
81
74
  const type = messageDetails.type.toLowerCase(); // type is context in get tags values : outbound | dvs | referral | loyalty | coupons
82
75
  const query = { type: !isFullMode && 'embedded', module: isFullMode ? 'default' : 'library', isEditFromCampaigns: (templateData || {}).isEditFromCampaigns};
@@ -87,11 +80,9 @@ function SlideBoxContent(props) {
87
80
  };
88
81
  let channel = currentChannel;//for create mode
89
82
  const isCreateSms = slidBoxContent === 'createTemplate' && channel === constants.SMS;
90
- const isCreateLine = slidBoxContent === 'createTemplate' && channel === constants.LINE;
91
83
  const isCreateMPush = slidBoxContent === 'createTemplate' && channel === constants.MOBILE_PUSH;
92
84
  const isCreateCallTask = slidBoxContent === 'createTemplate' && channel === constants.CALL_TASK;
93
85
  let isEditSms = false;
94
- let isEditLine = false;
95
86
  let isEditEmailWithId = false;
96
87
  let isEmailEditWithContent = false;
97
88
  let isPreview = false;
@@ -104,42 +95,16 @@ function SlideBoxContent(props) {
104
95
  if (templateData && channel) {
105
96
  channel = templateData.type;// for edit mode with template data
106
97
  isEditSms = slidBoxContent === 'editTemplate' && channel === constants.SMS;
107
- isEditLine = slidBoxContent === 'editTemplate' && channel === constants.LINE;
108
98
  isEditCallTask = slidBoxContent === 'editTemplate' && channel === constants.CALL_TASK;
109
99
  isEditMPush = slidBoxContent === 'editTemplate' && channel === constants.MOBILE_PUSH;
110
100
  isEditEmailWithId = slidBoxContent === 'editTemplate' && channel === constants.EMAIL && templateData._id;
111
101
  isEmailEditWithContent = slidBoxContent === 'editTemplate' && channel === constants.EMAIL && !templateData._id;
112
102
  isEditFacebook = slidBoxContent === 'editTemplate' && channel === constants.FACEBOOK;
113
- isPreview = slidBoxContent === 'preview' && (channel === constants.SMS || channel === constants.LINE);
103
+ isPreview = slidBoxContent === 'preview' && channel === constants.SMS;
114
104
  isEmailPreview = slidBoxContent === 'preview' && channel === constants.EMAIL;
115
105
  isMpushPreview = slidBoxContent === 'preview' && channel === constants.MOBILE_PUSH;
116
106
  }
117
107
 
118
- const getChannelPreviewContent = (templateDataObject) => {
119
- switch (templateDataObject.type.toUpperCase()) {
120
- case constants.SMS:
121
- return get(templateDataObject, `versions.base['sms-editor']`);
122
- case constants.LINE: {
123
- const content = get(templateDataObject, `versions.base.content.messages[0]`, {});
124
- let previewContent = {};
125
- if (content.text) {
126
- previewContent = {
127
- bodyText: content.text,
128
- };
129
- }
130
- if (content.originalContentUrl) {
131
- previewContent = {
132
- ...previewContent,
133
- bodyImage: content.previewImageUrl,
134
- };
135
- }
136
- return previewContent;
137
- }
138
- default:
139
- return get(templateDataObject, `versions.base.content`);
140
- }
141
- };
142
-
143
108
  return (
144
109
  <CreativesWrapper>
145
110
  {!isFullMode && slidBoxContent === 'templates' && (
@@ -162,10 +127,10 @@ function SlideBoxContent(props) {
162
127
  )}
163
128
  {isPreview && (
164
129
  <TemplatePreview
165
- content={getChannelPreviewContent(templateData)}
130
+ content={templateData.type.toUpperCase() === constants.SMS ? get(templateData, `versions.base['sms-editor']`) : get(templateData, `versions.base.content`)}
166
131
  unicodeEnabled={get(templateData, `versions.base['unicode-validity']`)}
167
132
  channel={templateData.type.toLowerCase()}
168
- charCounterEnabled={channel === constants.SMS}
133
+ charCounterEnabled
169
134
  templateData={templateData}
170
135
  showCount
171
136
  forwardedTags={forwardedTags}
@@ -220,8 +185,6 @@ function SlideBoxContent(props) {
220
185
  templateData={templateData}
221
186
  forwardedTags={forwardedTags}
222
187
  selectedOfferDetails={selectedOfferDetails}
223
- onPreviewContentClicked={onPreviewContentClicked}
224
- onTestContentClicked={onTestContentClicked}
225
188
  />
226
189
  )}
227
190
  {
@@ -255,8 +218,6 @@ function SlideBoxContent(props) {
255
218
  isFullMode={isFullMode}
256
219
  forwardedTags={forwardedTags}
257
220
  selectedOfferDetails={selectedOfferDetails}
258
- onPreviewContentClicked={onPreviewContentClicked}
259
- onTestContentClicked={onTestContentClicked}
260
221
  />
261
222
  )}
262
223
  {isEmailCreate && (
@@ -279,8 +240,6 @@ function SlideBoxContent(props) {
279
240
  onValidationFail={onValidationFail}
280
241
  forwardedTags={forwardedTags}
281
242
  selectedOfferDetails={selectedOfferDetails}
282
- onPreviewContentClicked={onPreviewContentClicked}
283
- onTestContentClicked={onTestContentClicked}
284
243
  />
285
244
  )}
286
245
  {(isEditEmailWithId || isEmailEditWithContent) && (
@@ -304,8 +263,6 @@ function SlideBoxContent(props) {
304
263
  onValidationFail={onValidationFail}
305
264
  forwardedTags={forwardedTags}
306
265
  selectedOfferDetails={selectedOfferDetails}
307
- onPreviewContentClicked={onPreviewContentClicked}
308
- onTestContentClicked={onTestContentClicked}
309
266
  />
310
267
  )}
311
268
  {isEditMPush &&
@@ -326,8 +283,6 @@ function SlideBoxContent(props) {
326
283
  onValidationFail={onValidationFail}
327
284
  forwardedTags={forwardedTags}
328
285
  selectedOfferDetails={selectedOfferDetails}
329
- onPreviewContentClicked={onPreviewContentClicked}
330
- onTestContentClicked={onTestContentClicked}
331
286
  />
332
287
  }
333
288
  {isCreateMPush &&
@@ -352,9 +307,7 @@ function SlideBoxContent(props) {
352
307
  query={query}
353
308
  forwardedTags={forwardedTags}
354
309
  onValidationFail={onValidationFail}
355
- selectedOfferDetails={selectedOfferDetails}
356
- onPreviewContentClicked={onPreviewContentClicked}
357
- onTestContentClicked={onTestContentClicked}/>
310
+ selectedOfferDetails={selectedOfferDetails}/>
358
311
  }
359
312
  {
360
313
  isEditFacebook && (
@@ -366,39 +319,6 @@ function SlideBoxContent(props) {
366
319
  />
367
320
  )
368
321
  }
369
- {
370
- isEditLine && (
371
- <LineEdit
372
- location={creativesLocationProps}
373
- params={{
374
- id: templateData._id,
375
- mode: templateData.modeType || (templateData.definition && templateData.definition.mode),
376
- }}
377
- route={{ name: (templateData.modeType || (templateData.definition && templateData.definition.mode)) === 'image' ? 'edit_image' : 'edit_text' }}
378
- onCreateComplete={onCreateComplete}
379
- isFullMode={isFullMode}
380
- saveMessage={saveMessage}
381
- getFormSubscriptionData={getFormData}
382
- isGetFormData={isGetFormData}
383
- templateData={templateData}
384
- selectedAccount={selectedAccount}
385
- />
386
- )
387
- }
388
- {
389
- isCreateLine && (
390
- <CreateLineWrapper
391
- location={creativesLocationProps}
392
- onCreateComplete={onCreateComplete}
393
- isFullMode={isFullMode}
394
- isGetFormData={isGetFormData}
395
- saveMessage={saveMessage}
396
- selectedAccount={selectedAccount}
397
- templateData={templateData}
398
- getFormSubscriptionData={getFormData}
399
- />
400
- )
401
- }
402
322
  </CreativesWrapper>
403
323
  );
404
324
  }
@@ -439,8 +359,5 @@ SlideBoxContent.propTypes = {
439
359
  onWeChatMaptemplateStepChange: PropTypes.func,
440
360
  weChatMaptemplateStep: PropTypes.string,
441
361
  onFacebookSubmit: PropTypes.func,
442
- onCreateComplete: PropTypes.func,
443
- saveMessage: PropTypes.func,
444
- selectedAccount: PropTypes.object,
445
362
  };
446
363
  export default SlideBoxContent;
@@ -48,7 +48,7 @@ function SlideBoxHeader(props) {
48
48
  )}
49
49
  {!showTemplateNameHeader && slidBoxContent === 'editTemplate' && (
50
50
  <CapHeader
51
- title={<FormattedMessage {...messages.editMessageContent} values={{channel: getChannelLabel(channel)}}/>}
51
+ title={<FormattedMessage {...messages.editMessageContent} />}
52
52
  prefix={creativesMode !== 'edit' && !isFullMode && showPrefix &&
53
53
  <PrefixWrapper>
54
54
  <CapIcons.backIcon onClick={onShowTemplates} />