@capillarytech/creatives-library 3.9.0 → 3.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +7 -7
- package/components/TemplatePreview/_templatePreview.scss +279 -20
- package/components/TemplatePreview/assets/images/home-screen-android.svg +21 -0
- package/components/TemplatePreview/assets/images/home-screen-ios.svg +16 -0
- package/components/TemplatePreview/assets/images/sms_mobile_android.svg +22 -0
- package/components/TemplatePreview/assets/images/sms_mobile_ios.svg +16 -0
- package/components/TemplatePreview/assets/images/wechat_mobile_android.svg +20 -0
- package/components/TemplatePreview/index.js +180 -20
- package/components/TemplatePreview/messages.js +16 -0
- package/package-lock.json +3096 -0
- package/package.json +1 -1
- package/translations/en.json +5 -0
- package/translations/zh.json +5 -0
- package/v2Components/FormBuilder/index.js +24 -8
- package/v2Components/MobilePushPreviewV2/index.js +40 -32
- package/v2Components/MobilePushPreviewV2/messages.js +0 -8
- package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/_wechatRichmediaTemplatePrev.scss +64 -0
- package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +100 -18
- package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/messages.js +12 -0
- package/v2Components/TemplatePreview/_templatePreview.scss +13 -4
- package/v2Components/TemplatePreview/assets/images/home-screen-android.svg +21 -0
- package/v2Components/TemplatePreview/assets/images/home-screen-ios.svg +16 -0
- package/v2Components/TemplatePreview/assets/images/sms_mobile_android.svg +22 -0
- package/v2Components/TemplatePreview/assets/images/wechat-home-screen-android.svg +21 -0
- package/v2Components/TemplatePreview/assets/images/wechat_mobile_android.svg +20 -0
- package/v2Components/TemplatePreview/index.js +147 -20
- package/v2Components/TemplatePreview/messages.js +8 -0
- package/v2Containers/CreativesContainer/SlideBoxContent.js +15 -1
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -1
- package/v2Containers/CreativesContainer/index.js +3 -1
- package/v2Containers/CreativesContainer/messages.js +2 -2
- package/v2Containers/Email/_email.scss +7 -1
- package/v2Containers/Email/index.js +39 -13
- package/v2Containers/Email/messages.js +4 -0
- package/v2Containers/EmailWrapper/index.js +7 -5
- package/v2Containers/MobilePush/Create/index.js +5 -0
- package/v2Containers/MobilePush/Edit/index.js +5 -0
- package/v2Containers/MobilepushWrapper/index.js +4 -1
- package/v2Containers/Sms/Create/index.js +2 -1
- package/v2Containers/Sms/Edit/index.js +2 -0
- package/v2Containers/Templates/index.js +2 -2
|
@@ -8,18 +8,145 @@ import PropTypes from 'prop-types';
|
|
|
8
8
|
|
|
9
9
|
import React from 'react';
|
|
10
10
|
import _ from 'lodash';
|
|
11
|
-
import { injectIntl, intlShape} from 'react-intl';
|
|
12
|
-
import {CapColumn} from '@capillarytech/cap-
|
|
11
|
+
import { injectIntl, intlShape, FormattedMessage} from 'react-intl';
|
|
12
|
+
import {CapColumn, CapTab, CapIcon, CapLabel, CapImage} from '@capillarytech/cap-ui-library';
|
|
13
13
|
import './_templatePreview.scss';
|
|
14
14
|
import {updateCharCount} from '../../utils/smsCharCountV2';
|
|
15
15
|
import messages from './messages';
|
|
16
16
|
const smsIcon = require('./assets/images/user-icon.svg');
|
|
17
|
+
const smsMobileAndroid = require('./assets/images/sms_mobile_android.svg');
|
|
18
|
+
const wechatMobileAndroid = require('./assets/images/wechat_mobile_android.svg');
|
|
19
|
+
const smsMobileIos = require('./assets/images/sms_mobile_ios.svg');
|
|
20
|
+
const smsAndroidHomeScreen = require('./assets/images/home-screen-android.svg');
|
|
21
|
+
const smsIosHomeScreen = require('./assets/images/home-screen-ios.svg');
|
|
17
22
|
const wechatBody = require('./assets/images/WECHAT_5x.png');
|
|
18
23
|
const smsBody = require('./assets/images/mobile.svg');
|
|
19
24
|
const androidPushMessagePhone = require('./assets/images/androidPushMessage.svg');
|
|
20
25
|
const iPhonePushMessagePhone = require('./assets/images/iPhonePushMessage.svg');
|
|
21
26
|
|
|
22
27
|
class TemplatePreview extends React.Component { // eslint-disable-line react/prefer-stateless-function
|
|
28
|
+
getWechatAndroidPreview = (content) => (
|
|
29
|
+
<div className="shell-lock-screen-android align-center" id="sms-preview">
|
|
30
|
+
<div className="lock-screen-preview">
|
|
31
|
+
<CapImage className="preview-image sms" src={smsAndroidHomeScreen} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
32
|
+
<div className="lock-msgContainer wechat">
|
|
33
|
+
<div className="sender-id-text">
|
|
34
|
+
{this.props.intl.formatMessage(messages.senderId)}
|
|
35
|
+
</div>
|
|
36
|
+
<div className="message-text-container">
|
|
37
|
+
<CapLabel type="label1" style={{ height: '15px' }} >{content}</CapLabel>
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
<div className="action-text">
|
|
41
|
+
<FormattedMessage {...messages.markAsRead}/> <FormattedMessage {...messages.reply}/>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
<div className="main-screen-preview">
|
|
45
|
+
<CapImage className="preview-image" src={wechatMobileAndroid} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
46
|
+
<div className="msgContainer wechat">
|
|
47
|
+
<div className="message-pop wechat align-left" style={{ background: '#ffffff', color: '#333333' }}>
|
|
48
|
+
{content}
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
getWechatIosPreview = (content) => (
|
|
56
|
+
<div className="shell-lock-screen-ios align-center" id="sms-preview">
|
|
57
|
+
<div className="lock-screen-preview">
|
|
58
|
+
<CapImage className="preview-image sms" src={smsIosHomeScreen} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
59
|
+
<div className="lock-msgContainer wechat">
|
|
60
|
+
<div className="sender-id-text">
|
|
61
|
+
{this.props.intl.formatMessage(messages.senderId)}
|
|
62
|
+
</div>
|
|
63
|
+
<div className="message-text-container">
|
|
64
|
+
<CapLabel type="label1" style={{ height: '15px' }} >{content}</CapLabel>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
<div className="action-text-reply">
|
|
68
|
+
<FormattedMessage {...messages.reply}/>
|
|
69
|
+
</div>
|
|
70
|
+
<div className="action-text-cancel">
|
|
71
|
+
<FormattedMessage {...messages.cancel}/>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
<div className="main-screen-preview">
|
|
75
|
+
<CapImage className="preview-image" src={wechatMobileAndroid} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
76
|
+
<div className="msgContainer wechat">
|
|
77
|
+
<div className="message-pop wechat align-left" style={{ background: '#ffffff', color: '#333333' }}>
|
|
78
|
+
{content}
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
getSmsAndroidPreview = (content) => (
|
|
86
|
+
<div className="shell-lock-screen-android align-center" id="sms-preview">
|
|
87
|
+
<div className="lock-screen-preview">
|
|
88
|
+
<CapImage className="preview-image sms" src={smsAndroidHomeScreen} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
89
|
+
<div className="lock-msgContainer sms">
|
|
90
|
+
<div className="sender-id-text">
|
|
91
|
+
{this.props.intl.formatMessage(messages.senderId)}
|
|
92
|
+
</div>
|
|
93
|
+
<div className="message-text-container">
|
|
94
|
+
<CapLabel type="label1" style={{ height: '15px' }} >{content}</CapLabel>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
<div className="action-text">
|
|
98
|
+
<FormattedMessage {...messages.markAsRead}/> <FormattedMessage {...messages.reply}/>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
<div className="main-screen-preview">
|
|
102
|
+
<CapImage className="preview-image sms" src={smsMobileAndroid} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
103
|
+
<div className="msgContainer sms">
|
|
104
|
+
<div className={"message-pop sms"}>
|
|
105
|
+
{content && content.length && content.map((msg) =>
|
|
106
|
+
<CapColumn className="message-pop-item align-left" style={{ background: '#FFFFFF', color: '#091e42'}}>
|
|
107
|
+
{msg}
|
|
108
|
+
</CapColumn>)
|
|
109
|
+
}
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
getSmsIosPreview = (content) => (
|
|
117
|
+
<div className="shell-lock-screen-ios align-center" id="sms-preview">
|
|
118
|
+
<div className="lock-screen-preview">
|
|
119
|
+
<CapImage className="preview-image sms" src={smsIosHomeScreen} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
120
|
+
<div className="lock-msgContainer sms">
|
|
121
|
+
<div className="sender-id-text">
|
|
122
|
+
{this.props.intl.formatMessage(messages.senderId)}
|
|
123
|
+
</div>
|
|
124
|
+
<div className="message-text-container">
|
|
125
|
+
<CapLabel type="label1" style={{ height: '15px' }} >{content}</CapLabel>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
<div className="action-text-reply">
|
|
129
|
+
<FormattedMessage {...messages.reply}/>
|
|
130
|
+
</div>
|
|
131
|
+
<div className="action-text-cancel">
|
|
132
|
+
<FormattedMessage {...messages.cancel}/>
|
|
133
|
+
</div>
|
|
134
|
+
</div>
|
|
135
|
+
<div className="main-screen-preview">
|
|
136
|
+
<CapImage className="preview-image sms" src={smsMobileIos} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
137
|
+
<div className="msgContainer sms">
|
|
138
|
+
<div className={"message-pop sms"}>
|
|
139
|
+
{content && content.length && content.map((msg) =>
|
|
140
|
+
<CapColumn className="message-pop-item align-left" style={{ background: '#ebecf0', color: '#091e42'}}>
|
|
141
|
+
{msg}
|
|
142
|
+
</CapColumn>)
|
|
143
|
+
}
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
);
|
|
149
|
+
|
|
23
150
|
render() {
|
|
24
151
|
console.log('preview props', this.props);
|
|
25
152
|
let content = channel && channel.toLowerCase() === 'sms' ? [this.props.content] : this.props.content;
|
|
@@ -38,6 +165,7 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
38
165
|
//smsText = this.props.intl.formatMessage(messages.previewGenerationMessage);
|
|
39
166
|
//console.log('message text', smsText);
|
|
40
167
|
}
|
|
168
|
+
const showLockScreenPreview = !!this.props.showLockScreenPreview;
|
|
41
169
|
const type = this.props.location && this.props.location.query.type ? this.props.location.query.type : '';
|
|
42
170
|
let iosActions = [];
|
|
43
171
|
if (channel.toLowerCase() === "mobilepush") {
|
|
@@ -52,35 +180,67 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
52
180
|
}
|
|
53
181
|
return (
|
|
54
182
|
<div className={`preview-container ${type === 'embedded' ? 'embedded-preview' : ''}`}>
|
|
55
|
-
{ channel && channel.toLowerCase() === 'sms' &&
|
|
56
|
-
|
|
57
|
-
|
|
183
|
+
{ channel && channel.toLowerCase() === 'sms' &&
|
|
184
|
+
(showLockScreenPreview ? (
|
|
185
|
+
<CapTab
|
|
186
|
+
panes={[
|
|
187
|
+
{
|
|
188
|
+
content: this.getSmsAndroidPreview(content),
|
|
189
|
+
tab: <CapIcon type="android" size='m' />,
|
|
190
|
+
key: 'android',
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
content: this.getSmsIosPreview(content),
|
|
194
|
+
tab: <CapIcon type="ios" size='m' />,
|
|
195
|
+
key: 'ios',
|
|
196
|
+
},
|
|
197
|
+
]}
|
|
198
|
+
tabBarStyle={{margin: 'auto', width: '14%'}}
|
|
199
|
+
/>
|
|
200
|
+
) : (
|
|
201
|
+
<div className="shell align-center" id="sms-preview">
|
|
202
|
+
<CapImage className="preview-image sms" src={smsMobileAndroid} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
58
203
|
<div className="msgContainer sms">
|
|
59
|
-
<img className="sms-icon" src={smsIcon} alt={this.props.intl.formatMessage(messages.smsIcon)} />
|
|
60
204
|
<div className={"message-pop sms"}>
|
|
61
205
|
{content && content.length && content.map((msg) =>
|
|
62
|
-
<CapColumn className="message-pop-item align-left" style={{ background: '#
|
|
206
|
+
<CapColumn className="message-pop-item align-left" style={{ background: '#FFFFFF', color: '#091e42'}}>
|
|
63
207
|
{msg}
|
|
64
208
|
</CapColumn>)
|
|
65
209
|
}
|
|
66
210
|
</div>
|
|
67
211
|
</div>
|
|
68
|
-
</div>
|
|
69
|
-
|
|
70
|
-
{channel && channel.toLowerCase() === 'wechat'
|
|
71
|
-
(
|
|
72
|
-
<
|
|
212
|
+
</div>)
|
|
213
|
+
)}
|
|
214
|
+
{channel && channel.toLowerCase() === 'wechat' &&
|
|
215
|
+
(showLockScreenPreview ? (
|
|
216
|
+
<CapTab
|
|
217
|
+
panes={[
|
|
218
|
+
{
|
|
219
|
+
content: this.getWechatAndroidPreview(content),
|
|
220
|
+
tab: <CapIcon type="android" size='m' />,
|
|
221
|
+
key: 'android',
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
content: this.getWechatIosPreview(content),
|
|
225
|
+
tab: <CapIcon type="ios" size='m' />,
|
|
226
|
+
key: 'ios',
|
|
227
|
+
},
|
|
228
|
+
]}
|
|
229
|
+
tabBarStyle={{margin: 'auto', width: '14%'}}
|
|
230
|
+
/>
|
|
231
|
+
) : (
|
|
232
|
+
<div className="shell align-center" id="sms-preview">
|
|
233
|
+
<CapImage className="preview-image" src={channel.toLowerCase() === 'wechat' ? wechatMobileAndroid : smsBody} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
73
234
|
<div className="msgContainer">
|
|
74
|
-
{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)} />}
|
|
75
235
|
<div className="message-pop align-left" style={{ background: `${this.props.channel.toLowerCase() === 'wechat' ? '#ffffff' : '#3F51B5'}`, color: `${this.props.channel.toLowerCase() === 'wechat' ? '#333333' : '#ffffff'}`}}>{content}
|
|
76
236
|
</div>
|
|
77
237
|
</div>
|
|
78
238
|
</div>
|
|
79
|
-
)
|
|
80
|
-
}
|
|
239
|
+
)
|
|
240
|
+
)}
|
|
81
241
|
{ channel && (channel.toLowerCase() === 'mobilepush') &&
|
|
82
242
|
(<div className="shell align-center" id="mobilepush-preview">
|
|
83
|
-
<
|
|
243
|
+
<CapImage className="preview-image" src={this.props.device === "android" ? androidPushMessagePhone : iPhonePushMessagePhone} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
84
244
|
{(!!content.header || !!content.bodyText || !!content.bodyImage) &&
|
|
85
245
|
<div className={`${this.props.device}-push-message-Container`}>
|
|
86
246
|
{this.props.device === "android" ?
|
|
@@ -95,7 +255,7 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
95
255
|
{content.bodyText}
|
|
96
256
|
</div>
|
|
97
257
|
{content.bodyImage && <div className="body-image">
|
|
98
|
-
<
|
|
258
|
+
<CapImage src={content.bodyImage} alt="" />
|
|
99
259
|
</div>}
|
|
100
260
|
{content.actions.filter((action) => action.label).length ?
|
|
101
261
|
<div className="actions">
|
|
@@ -111,7 +271,7 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
111
271
|
<span className="app-icon"></span>{content.appName ? content.appName : "App name"} <i className="material-icons">{this.props.intl.formatMessage(messages.close)}</i>
|
|
112
272
|
</div>
|
|
113
273
|
{content.bodyImage && <div className="body-image">
|
|
114
|
-
<
|
|
274
|
+
<CapImage src={content.bodyImage} alt=""/>
|
|
115
275
|
</div>}
|
|
116
276
|
<div className="title">
|
|
117
277
|
{content.header}
|
|
@@ -130,11 +290,11 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
130
290
|
{
|
|
131
291
|
channel && channel.toLowerCase() === 'line' ? (
|
|
132
292
|
<div className="shell align-center" id="sms-preview">
|
|
133
|
-
<
|
|
293
|
+
<CapImage className="preview-image" src={wechatBody} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
134
294
|
<div className="msgContainer">
|
|
135
295
|
<div className="sms-icon" style={{ width: '25px', height: '25px', background: '#2E89DF' }}></div>
|
|
136
296
|
<div className="message-pop align-left" style={{ background: '#ffffff', color: '#333333' }}>
|
|
137
|
-
{ (content && content.bodyImage) ? <
|
|
297
|
+
{ (content && content.bodyImage) ? <CapImage src={content.bodyImage} alt="ddd" style={{maxWidth: '100%'}}/> : '' }
|
|
138
298
|
{ (content && content.bodyText) ? content.bodyText : ''}
|
|
139
299
|
</div>
|
|
140
300
|
</div>
|
|
@@ -10,6 +10,10 @@ export default defineMessages({
|
|
|
10
10
|
id: 'creatives.components.TemplatePreview.previewGenerationMessage',
|
|
11
11
|
defaultMessage: "Preview is being generated",
|
|
12
12
|
},
|
|
13
|
+
senderId: {
|
|
14
|
+
id: 'creatives.components.TemplatePreview.senderId',
|
|
15
|
+
defaultMessage: "Sender ID",
|
|
16
|
+
},
|
|
13
17
|
sms: {
|
|
14
18
|
id: 'creatives.components.TemplatePreview.sms',
|
|
15
19
|
defaultMessage: "SMS",
|
|
@@ -46,4 +50,16 @@ export default defineMessages({
|
|
|
46
50
|
id: 'creatives.components.TemplatePreview.smsIcon',
|
|
47
51
|
defaultMessage: 'Sms Icon',
|
|
48
52
|
},
|
|
53
|
+
markAsRead: {
|
|
54
|
+
id: 'creatives.components.TemplatePreview.markAsRead',
|
|
55
|
+
defaultMessage: 'Mark as read',
|
|
56
|
+
},
|
|
57
|
+
reply: {
|
|
58
|
+
id: 'creatives.components.TemplatePreview.reply',
|
|
59
|
+
defaultMessage: 'Reply',
|
|
60
|
+
},
|
|
61
|
+
cancel: {
|
|
62
|
+
id: 'creatives.components.TemplatePreview.cancel',
|
|
63
|
+
defaultMessage: 'Cancel',
|
|
64
|
+
},
|
|
49
65
|
});
|