@capillarytech/creatives-library 3.9.20 → 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.
- package/components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +7 -7
- package/components/TemplatePreview/_templatePreview.scss +20 -287
- package/components/TemplatePreview/index.js +31 -203
- package/components/TemplatePreview/messages.js +0 -21
- package/containers/Assets/Gallery/index.js +59 -53
- package/index.js +0 -6
- package/package.json +1 -1
- package/routes.js +0 -5
- package/services/getSchema.js +1 -4
- package/translations/en.json +1 -29
- package/translations/zh.json +1 -29
- package/v2Components/FormBuilder/index.js +37 -188
- package/v2Components/FormBuilder/messages.js +0 -16
- package/v2Components/MobilePushPreviewV2/index.js +32 -40
- package/v2Components/MobilePushPreviewV2/messages.js +8 -0
- package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/_wechatRichmediaTemplatePrev.scss +0 -64
- package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +18 -100
- package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/messages.js +0 -12
- package/v2Components/TemplatePreview/_templatePreview.scss +4 -24
- package/v2Components/TemplatePreview/index.js +23 -159
- package/v2Components/TemplatePreview/messages.js +0 -8
- package/v2Containers/Assets/Gallery/index.js +29 -41
- package/v2Containers/CreativesContainer/SlideBoxContent.js +4 -87
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -1
- package/v2Containers/CreativesContainer/index.js +2 -58
- package/v2Containers/CreativesContainer/messages.js +2 -2
- package/v2Containers/Email/_email.scss +1 -7
- package/v2Containers/Email/index.js +14 -40
- package/v2Containers/Email/messages.js +0 -4
- package/v2Containers/EmailWrapper/index.js +5 -7
- package/v2Containers/Line/Create/_lineCreate.scss +19 -40
- package/v2Containers/Line/Create/actions.js +9 -13
- package/v2Containers/Line/Create/index.js +237 -498
- package/v2Containers/Line/Create/messages.js +2 -42
- package/v2Containers/Line/Create/sagas.js +4 -10
- package/v2Containers/Line/Create/selectors.js +9 -3
- package/v2Containers/MobilePush/Create/index.js +0 -5
- package/v2Containers/MobilePush/Edit/index.js +0 -5
- package/v2Containers/MobilepushWrapper/index.js +1 -4
- package/v2Containers/Sms/Create/index.js +1 -2
- package/v2Containers/Sms/Edit/index.js +0 -2
- package/v2Containers/Templates/_templates.scss +1 -24
- package/v2Containers/Templates/actions.js +0 -7
- package/v2Containers/Templates/constants.js +0 -2
- package/v2Containers/Templates/index.js +15 -118
- package/v2Containers/Templates/messages.js +0 -8
- package/v2Containers/Templates/reducer.js +0 -2
- package/v2Containers/TemplatesV2/index.js +4 -5
- package/v2Containers/TemplatesV2/messages.js +0 -4
- package/assets/IPad.js +0 -23
- package/assets/index.js +0 -1
- package/assets/lineImageTemplate.png +0 -0
- package/components/TemplatePreview/assets/images/HomeScreenAndroid.js +0 -53
- package/components/TemplatePreview/assets/images/SmsMobileAndroid.js +0 -52
- package/components/TemplatePreview/assets/images/SmsMobileIos.js +0 -71
- package/components/TemplatePreview/assets/images/UserIcon.js +0 -24
- package/components/TemplatePreview/assets/images/WechatMobileAndroid.js +0 -53
- package/components/TemplatePreview/assets/images/home-screen-android.svg +0 -21
- package/components/TemplatePreview/assets/images/home-screen-ios.svg +0 -16
- package/components/TemplatePreview/assets/images/sms_mobile_android.svg +0 -22
- package/components/TemplatePreview/assets/images/sms_mobile_ios.svg +0 -16
- package/components/TemplatePreview/assets/images/wechat_mobile_android.svg +0 -20
- package/v2Components/TemplatePreview/assets/images/HomeScreenAndroid.js +0 -53
- package/v2Components/TemplatePreview/assets/images/SmsMobileAndroid.js +0 -52
- package/v2Components/TemplatePreview/assets/images/UserIcon.js +0 -24
- package/v2Components/TemplatePreview/assets/images/WechatHomeScreenAndroid.js +0 -74
- package/v2Components/TemplatePreview/assets/images/WechatMobileAndroid.js +0 -53
- package/v2Components/TemplatePreview/assets/images/home-screen-android.svg +0 -21
- package/v2Components/TemplatePreview/assets/images/home-screen-ios.svg +0 -16
- package/v2Components/TemplatePreview/assets/images/sms_mobile_android.svg +0 -22
- package/v2Components/TemplatePreview/assets/images/wechat-home-screen-android.svg +0 -21
- package/v2Components/TemplatePreview/assets/images/wechat_mobile_android.svg +0 -20
- package/v2Containers/Assets/images/CalltaskIllustration.js +0 -71
- package/v2Containers/Assets/images/EmailIllustration.js +0 -87
- package/v2Containers/Assets/images/ImageGalleryIllustration.js +0 -60
- package/v2Containers/Assets/images/PushIllustration.js +0 -60
- package/v2Containers/Assets/images/SmsIllustration.js +0 -191
- package/v2Containers/Assets/images/WechatIllustration.js +0 -90
- package/v2Containers/Assets/images/index.js +0 -6
- package/v2Containers/Line/Create/initialSchema.js +0 -378
- package/v2Containers/Line/CreateWrapper/constants.js +0 -2
- package/v2Containers/Line/CreateWrapper/index.js +0 -117
- 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
|
|
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
|
-
|
|
18
|
-
const
|
|
19
|
-
const
|
|
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;
|
|
@@ -161,43 +64,16 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
161
64
|
</CapHeading>}
|
|
162
65
|
</CapColumn>}
|
|
163
66
|
<CapColumn span={this.props.showCount ? 8 : 24}>
|
|
164
|
-
{this.props.showTestAndPreviewIcon && this.props.channel !== WECHAT && (
|
|
165
|
-
<div className="test-and-preview-container">
|
|
166
|
-
<CapButton
|
|
167
|
-
style={{
|
|
168
|
-
color: '#2466ea',
|
|
169
|
-
display: 'inline-block',
|
|
170
|
-
padding: '0 6px',
|
|
171
|
-
marginTop: '12px',
|
|
172
|
-
}}
|
|
173
|
-
type="flat"
|
|
174
|
-
onClick={() => this.onPreviewContentClicked(this.props.channel)}
|
|
175
|
-
>
|
|
176
|
-
<CapIcon type="eye"/><FormattedMessage {...messages.preview} />
|
|
177
|
-
</CapButton>
|
|
178
|
-
<CapButton
|
|
179
|
-
style={{
|
|
180
|
-
color: '#2466ea',
|
|
181
|
-
display: 'inline-block',
|
|
182
|
-
padding: '0 6px',
|
|
183
|
-
marginTop: '12px',
|
|
184
|
-
}}
|
|
185
|
-
type="flat"
|
|
186
|
-
onClick={() => this.onTestContentClicked(this.props.channel)}
|
|
187
|
-
>
|
|
188
|
-
<CapIcon type="lab"/><FormattedMessage {...messages.testMessage} />
|
|
189
|
-
</CapButton>
|
|
190
|
-
</div>
|
|
191
|
-
)}
|
|
192
67
|
<div className={`preview-container ${type === 'embedded' ? 'embedded-preview' : ''}`}>
|
|
193
68
|
{ channel && channel.toLowerCase() === 'sms' &&
|
|
194
69
|
<div>
|
|
195
|
-
<div className="shell
|
|
196
|
-
<
|
|
70
|
+
<div className="shell align-center" id="sms-preview">
|
|
71
|
+
<img className="preview-image sms" src={smsBody} alt="Preview is being generated"/>
|
|
197
72
|
<div className="msgContainer sms">
|
|
73
|
+
<img className="sms-icon" src={smsIcon} alt="Sms icon" />
|
|
198
74
|
<div className={"message-pop sms"}>
|
|
199
75
|
{content && content.length && content.map((msg, index) =>
|
|
200
|
-
<CapColumn key={`"message-pop-content-${index}`} className="message-pop-item align-left" style={{ background: '#
|
|
76
|
+
<CapColumn key={`"message-pop-content-${index}`} className="message-pop-item align-left" style={{ background: '#3F51B5', color: '#ffffff'}}>
|
|
201
77
|
{msg}
|
|
202
78
|
</CapColumn>)
|
|
203
79
|
}
|
|
@@ -220,9 +96,10 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
220
96
|
</div>
|
|
221
97
|
}
|
|
222
98
|
{channel && channel.toLowerCase() === 'wechat' ?
|
|
223
|
-
( <div className="shell
|
|
224
|
-
<
|
|
225
|
-
<div className="msgContainer
|
|
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)} />}
|
|
226
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}
|
|
227
104
|
</div>
|
|
228
105
|
</div>
|
|
@@ -230,10 +107,10 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
230
107
|
) : ''
|
|
231
108
|
}
|
|
232
109
|
{ channel && (channel.toLowerCase() === 'mobilepush') &&
|
|
233
|
-
(<div className="shell
|
|
234
|
-
<
|
|
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)}/>
|
|
235
112
|
{(!!content.header || !!content.bodyText || !!content.bodyImage) &&
|
|
236
|
-
<div className={`${this.props.device
|
|
113
|
+
<div className={`${this.props.device}-push-message-Container`}>
|
|
237
114
|
{this.props.device === "android" ?
|
|
238
115
|
<div className="message-pop align-left">
|
|
239
116
|
<div className="app-name">
|
|
@@ -246,7 +123,7 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
246
123
|
{content.bodyText}
|
|
247
124
|
</div>
|
|
248
125
|
{content.bodyImage && <div className="body-image">
|
|
249
|
-
<
|
|
126
|
+
<img src={content.bodyImage} alt="" />
|
|
250
127
|
</div>}
|
|
251
128
|
{content.actions.filter((action) => action.label).length ?
|
|
252
129
|
<div className="actions">
|
|
@@ -261,7 +138,7 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
261
138
|
<span className="app-icon"></span>{content.appName ? content.appName : "App name"} <i className="material-icons">{this.props.intl.formatMessage(messages.close)}</i>
|
|
262
139
|
</div>
|
|
263
140
|
{content.bodyImage && <div className="body-image">
|
|
264
|
-
<
|
|
141
|
+
<img src={content.bodyImage} alt=""/>
|
|
265
142
|
</div>}
|
|
266
143
|
<div className="title">
|
|
267
144
|
{content.header}
|
|
@@ -279,22 +156,13 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
279
156
|
}
|
|
280
157
|
{
|
|
281
158
|
channel && channel.toLowerCase() === 'line' ? (
|
|
282
|
-
<div className="shell
|
|
283
|
-
<
|
|
284
|
-
<div className="msgContainer
|
|
285
|
-
<div className="sms-icon" style={{
|
|
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>
|
|
286
163
|
<div className="message-pop align-left" style={{ background: '#ffffff', color: '#333333' }}>
|
|
287
|
-
{
|
|
288
|
-
|
|
289
|
-
if (item === 'bodyText' && content[item]) {
|
|
290
|
-
return content[item];
|
|
291
|
-
}
|
|
292
|
-
if (item === 'bodyImage' && content[item]) {
|
|
293
|
-
return <CapImage src={content[item]} alt="brand-name" style={{maxWidth: '100%'}}/>;
|
|
294
|
-
}
|
|
295
|
-
return null;
|
|
296
|
-
})
|
|
297
|
-
}
|
|
164
|
+
{ (content && content.bodyImage) ? <img src={content.bodyImage} alt="ddd" style={{maxWidth: '100%'}}/> : '' }
|
|
165
|
+
{ (content && content.bodyText) ? content.bodyText : ''}
|
|
298
166
|
</div>
|
|
299
167
|
</div>
|
|
300
168
|
{ (content && content.bodyText) ? <p style={{fontSize: 16, fontWeight: "bold"}}>Chars Count: {content.bodyText.length} / (1600)</p> : '' }
|
|
@@ -321,10 +189,6 @@ TemplatePreview.propTypes = {
|
|
|
321
189
|
unicodeEnabled: PropTypes.bool,
|
|
322
190
|
showCount: PropTypes.bool,
|
|
323
191
|
intl: intlShape.isRequired,
|
|
324
|
-
templateDataRaw: PropTypes.object,
|
|
325
|
-
onPreviewContentClicked: PropTypes.func,
|
|
326
|
-
onTestContentClicked: PropTypes.func,
|
|
327
|
-
showTestAndPreviewIcon: PropTypes.bool,
|
|
328
192
|
};
|
|
329
193
|
|
|
330
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
|
});
|
|
@@ -245,7 +245,6 @@ export class Gallery extends React.Component { // eslint-disable-line react/pref
|
|
|
245
245
|
const fileParams = {
|
|
246
246
|
width: this.width,
|
|
247
247
|
height: this.height,
|
|
248
|
-
isGeneratePreview: true,
|
|
249
248
|
};
|
|
250
249
|
that.props.actions.uploadAsset(files[file], 'image', fileParams);
|
|
251
250
|
};
|
|
@@ -317,34 +316,29 @@ export class Gallery extends React.Component { // eslint-disable-line react/pref
|
|
|
317
316
|
{
|
|
318
317
|
key: `${currentChannel}-card-${template.name}`,
|
|
319
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
|
+
],
|
|
320
338
|
};
|
|
321
|
-
if (!this.props.isLineAsset) {
|
|
322
|
-
templateData.extra = [
|
|
323
|
-
<CapIcon
|
|
324
|
-
className="view-gallery"
|
|
325
|
-
style={{marginRight: '16px'}}
|
|
326
|
-
type="eye"
|
|
327
|
-
onClick={() => { this.openPreviewMode(template); }}
|
|
328
|
-
/>,
|
|
329
|
-
<CapDropdown
|
|
330
|
-
overlay={
|
|
331
|
-
<CapMenu>
|
|
332
|
-
<CapMenu.Item className="delete-gallery" onClick={() => this.deleteAsset(template)}>
|
|
333
|
-
<FormattedMessage {...messages.delete} />
|
|
334
|
-
</CapMenu.Item>
|
|
335
|
-
</CapMenu>
|
|
336
|
-
}
|
|
337
|
-
>
|
|
338
|
-
<CapIcon type="more" />
|
|
339
|
-
</CapDropdown>,
|
|
340
|
-
];
|
|
341
|
-
}
|
|
342
339
|
if (!this.props.isFullMode) {
|
|
343
340
|
templateData.hoverOption = <CapButton onClick={(e) => handlers.selectAsset(e, template._id)}><FormattedMessage {...messages.select} /></CapButton>;
|
|
344
341
|
}
|
|
345
|
-
if (this.props.isLineAsset) {
|
|
346
|
-
templateData.hoverOption = <CapButton onClick={() => this.props.onGalleryImageSelect(template)}><FormattedMessage {...messages.select} /></CapButton>;
|
|
347
|
-
}
|
|
348
342
|
const secureFilePath = _.get(template, 'metaInfo.secure_file_path');
|
|
349
343
|
templateData.url = secureFilePath || _.get(template, 'metaInfo.public_url');
|
|
350
344
|
return templateData;
|
|
@@ -353,7 +347,7 @@ export class Gallery extends React.Component { // eslint-disable-line react/pref
|
|
|
353
347
|
{filterContent}
|
|
354
348
|
<CapSpin spinning={isLoading} tip={loadingTip} style={{width: "100%"}}>
|
|
355
349
|
{!isLoading && <div>
|
|
356
|
-
{!_.isEmpty(templates) || !_.isEmpty(searchText) ? <div className=
|
|
350
|
+
{!_.isEmpty(templates) || !_.isEmpty(searchText) ? <div className="pagination-container">
|
|
357
351
|
<CapCustomCardList key={`${currentChannel}-card-list`} cardList={cardDataList} type={'Email'} />
|
|
358
352
|
{!_.isEmpty(searchText) && _.isEmpty(templates) && (
|
|
359
353
|
<div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh'}}>
|
|
@@ -427,25 +421,21 @@ export class Gallery extends React.Component { // eslint-disable-line react/pref
|
|
|
427
421
|
<div style={{ marginTop: '8px', width: '50%'}}>
|
|
428
422
|
<CapInput.Search
|
|
429
423
|
className="search-text"
|
|
430
|
-
style={{width:
|
|
424
|
+
style={{width: '210px'}}
|
|
431
425
|
placeholder={this.props.intl.formatMessage(messages.search)}
|
|
432
426
|
value={this.state.searchText}
|
|
433
427
|
onChange={(e) => this.searchAsset(e.target.value)}
|
|
434
428
|
onClear={() => this.searchAsset('')}
|
|
435
429
|
/>
|
|
436
430
|
</div>
|
|
437
|
-
{
|
|
438
|
-
|
|
439
|
-
<
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
</form>
|
|
446
|
-
</div>
|
|
447
|
-
)
|
|
448
|
-
}
|
|
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>
|
|
449
439
|
</div>
|
|
450
440
|
) : <input style={{ display: 'none'}} id="fileName" type="file" onChange={(e) => this.uploadImages(e, {files: e.target.files})} accept="image/*" multiple/>;
|
|
451
441
|
const isLoading = this.props.Gallery.assetUploading || this.props.Gallery.fetchingAllAssets;
|
|
@@ -506,8 +496,6 @@ Gallery.propTypes = {
|
|
|
506
496
|
location: PropTypes.object,
|
|
507
497
|
intl: intlShape.isRequired,
|
|
508
498
|
isFullMode: PropTypes.bool,
|
|
509
|
-
isLineAsset: PropTypes.bool,
|
|
510
|
-
onGalleryImageSelect: PropTypes.func,
|
|
511
499
|
};
|
|
512
500
|
|
|
513
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' &&
|
|
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={
|
|
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
|
|
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}
|
|
51
|
+
title={<FormattedMessage {...messages.editMessageContent} />}
|
|
52
52
|
prefix={creativesMode !== 'edit' && !isFullMode && showPrefix &&
|
|
53
53
|
<PrefixWrapper>
|
|
54
54
|
<CapIcons.backIcon onClick={onShowTemplates} />
|