@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.
- 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/containers/Cap/index.js +0 -1
- 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 +36 -44
- 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 -162
- package/v2Components/TemplatePreview/messages.js +0 -8
- package/v2Containers/Assets/Gallery/index.js +48 -54
- 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/Email/reducer.js +0 -1
- 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;
|
|
@@ -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
|
|
199
|
-
<
|
|
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: '#
|
|
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
|
|
227
|
-
<
|
|
228
|
-
<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)} />}
|
|
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
|
|
237
|
-
<
|
|
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
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
|
286
|
-
<
|
|
287
|
-
<div className="msgContainer
|
|
288
|
-
<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>
|
|
289
163
|
<div className="message-pop align-left" style={{ background: '#ffffff', color: '#333333' }}>
|
|
290
|
-
{
|
|
291
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
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=
|
|
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:
|
|
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
|
-
|
|
433
|
-
<
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
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' &&
|
|
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} />
|