@capillarytech/creatives-library 3.10.0 → 3.11.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/assets/lineImageTemplate.png +0 -0
- package/components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +7 -7
- package/components/TemplatePreview/_templatePreview.scss +287 -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 +203 -31
- package/components/TemplatePreview/messages.js +21 -0
- package/containers/Assets/Gallery/index.js +53 -59
- package/containers/Cap/index.js +1 -0
- package/index.js +6 -0
- package/package.json +1 -1
- package/routes.js +5 -0
- package/services/getSchema.js +4 -1
- package/translations/en.json +40 -4
- package/translations/zh.json +39 -3
- package/v2Components/FormBuilder/index.js +188 -37
- package/v2Components/FormBuilder/messages.js +16 -0
- package/v2Components/MobilePushPreviewV2/index.js +44 -36
- 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 +24 -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 +162 -23
- package/v2Components/TemplatePreview/messages.js +8 -0
- package/v2Containers/Assets/Gallery/index.js +54 -48
- package/v2Containers/CreativesContainer/SlideBoxContent.js +87 -4
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -1
- package/v2Containers/CreativesContainer/index.js +58 -2
- package/v2Containers/CreativesContainer/messages.js +2 -2
- package/v2Containers/Email/_email.scss +7 -1
- package/v2Containers/Email/index.js +40 -14
- package/v2Containers/Email/messages.js +4 -0
- package/v2Containers/Email/reducer.js +1 -0
- package/v2Containers/EmailWrapper/index.js +7 -5
- package/v2Containers/Line/Create/_lineCreate.scss +40 -19
- package/v2Containers/Line/Create/actions.js +13 -9
- package/v2Containers/Line/Create/index.js +498 -237
- package/v2Containers/Line/Create/initialSchema.js +378 -0
- package/v2Containers/Line/Create/messages.js +42 -2
- package/v2Containers/Line/Create/sagas.js +10 -4
- package/v2Containers/Line/Create/selectors.js +3 -9
- package/v2Containers/Line/CreateWrapper/constants.js +2 -0
- package/v2Containers/Line/CreateWrapper/index.js +117 -0
- package/v2Containers/Line/CreateWrapper/messages.js +55 -0
- 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/_templates.scss +24 -1
- package/v2Containers/Templates/actions.js +7 -0
- package/v2Containers/Templates/constants.js +2 -0
- package/v2Containers/Templates/index.js +118 -15
- package/v2Containers/Templates/messages.js +8 -0
- package/v2Containers/Templates/reducer.js +2 -0
- package/v2Containers/TemplatesV2/index.js +5 -4
- package/v2Containers/TemplatesV2/messages.js +4 -0
|
@@ -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, CapTooltip} 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,7 +165,9 @@ 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 : '';
|
|
170
|
+
const { containsUnicodeContent = false } = this.props;
|
|
42
171
|
let iosActions = [];
|
|
43
172
|
if (channel.toLowerCase() === "mobilepush") {
|
|
44
173
|
iosActions = _.map(content.actions, (action) => {
|
|
@@ -53,34 +182,66 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
53
182
|
return (
|
|
54
183
|
<div className={`preview-container ${type === 'embedded' ? 'embedded-preview' : ''}`}>
|
|
55
184
|
{ channel && channel.toLowerCase() === 'sms' &&
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
185
|
+
(showLockScreenPreview ? (
|
|
186
|
+
<CapTab
|
|
187
|
+
panes={[
|
|
188
|
+
{
|
|
189
|
+
content: this.getSmsAndroidPreview(content),
|
|
190
|
+
tab: <CapIcon type="android" size="m" />,
|
|
191
|
+
key: 'android',
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
content: this.getSmsIosPreview(content),
|
|
195
|
+
tab: <CapIcon type="ios" size="m" />,
|
|
196
|
+
key: 'ios',
|
|
197
|
+
},
|
|
198
|
+
]}
|
|
199
|
+
tabBarStyle={{margin: 'auto', width: '14%'}}
|
|
200
|
+
/>
|
|
201
|
+
) : (
|
|
202
|
+
<div className="shell align-center" id="sms-preview">
|
|
203
|
+
<CapImage className="preview-image sms" src={smsMobileAndroid} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
204
|
+
<div className="msgContainer sms">
|
|
205
|
+
<div className={"message-pop sms"}>
|
|
206
|
+
{content && content.length && content.map((msg) =>
|
|
207
|
+
<CapColumn className="message-pop-item align-left" style={{ background: '#FFFFFF', color: '#091e42'}}>
|
|
208
|
+
{msg}
|
|
209
|
+
</CapColumn>)
|
|
65
210
|
}
|
|
211
|
+
</div>
|
|
212
|
+
</div>
|
|
213
|
+
</div>)
|
|
214
|
+
)}
|
|
215
|
+
{channel && channel.toLowerCase() === 'wechat' &&
|
|
216
|
+
(showLockScreenPreview ? (
|
|
217
|
+
<CapTab
|
|
218
|
+
panes={[
|
|
219
|
+
{
|
|
220
|
+
content: this.getWechatAndroidPreview(content),
|
|
221
|
+
tab: <CapIcon type="android" size="m" />,
|
|
222
|
+
key: 'android',
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
content: this.getWechatIosPreview(content),
|
|
226
|
+
tab: <CapIcon type="ios" size="m" />,
|
|
227
|
+
key: 'ios',
|
|
228
|
+
},
|
|
229
|
+
]}
|
|
230
|
+
tabBarStyle={{margin: 'auto', width: '14%'}}
|
|
231
|
+
/>
|
|
232
|
+
) : (
|
|
233
|
+
<div className="shell align-center" id="sms-preview">
|
|
234
|
+
<CapImage className="preview-image" src={channel.toLowerCase() === 'wechat' ? wechatMobileAndroid : smsBody} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
235
|
+
<div className="msgContainer">
|
|
236
|
+
<div className="message-pop align-left" style={{ background: `${this.props.channel.toLowerCase() === 'wechat' ? '#ffffff' : '#3F51B5'}`, color: `${this.props.channel.toLowerCase() === 'wechat' ? '#333333' : '#ffffff'}`}}>{content}
|
|
237
|
+
</div>
|
|
66
238
|
</div>
|
|
67
239
|
</div>
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
{channel && channel.toLowerCase() === 'wechat' ?
|
|
71
|
-
( <div className="shell align-center" id="sms-preview">
|
|
72
|
-
<img className="preview-image" src={channel.toLowerCase() === 'wechat' ? wechatBody : smsBody} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
73
|
-
<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
|
-
<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
|
-
</div>
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
) : ''
|
|
80
|
-
}
|
|
240
|
+
)
|
|
241
|
+
)}
|
|
81
242
|
{ channel && (channel.toLowerCase() === 'mobilepush') &&
|
|
82
243
|
(<div className="shell align-center" id="mobilepush-preview">
|
|
83
|
-
<
|
|
244
|
+
<CapImage className="preview-image" src={this.props.device === "android" ? androidPushMessagePhone : iPhonePushMessagePhone} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
84
245
|
{(!!content.header || !!content.bodyText || !!content.bodyImage) &&
|
|
85
246
|
<div className={`${this.props.device}-push-message-Container`}>
|
|
86
247
|
{this.props.device === "android" ?
|
|
@@ -95,7 +256,7 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
95
256
|
{content.bodyText}
|
|
96
257
|
</div>
|
|
97
258
|
{content.bodyImage && <div className="body-image">
|
|
98
|
-
<
|
|
259
|
+
<CapImage src={content.bodyImage} alt="" />
|
|
99
260
|
</div>}
|
|
100
261
|
{content.actions.filter((action) => action.label).length ?
|
|
101
262
|
<div className="actions">
|
|
@@ -111,7 +272,7 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
111
272
|
<span className="app-icon"></span>{content.appName ? content.appName : "App name"} <i className="material-icons">{this.props.intl.formatMessage(messages.close)}</i>
|
|
112
273
|
</div>
|
|
113
274
|
{content.bodyImage && <div className="body-image">
|
|
114
|
-
<
|
|
275
|
+
<CapImage src={content.bodyImage} alt=""/>
|
|
115
276
|
</div>}
|
|
116
277
|
<div className="title">
|
|
117
278
|
{content.header}
|
|
@@ -130,11 +291,11 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
130
291
|
{
|
|
131
292
|
channel && channel.toLowerCase() === 'line' ? (
|
|
132
293
|
<div className="shell align-center" id="sms-preview">
|
|
133
|
-
<
|
|
134
|
-
<div className="msgContainer">
|
|
294
|
+
<CapImage className="preview-image" src={wechatBody} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
295
|
+
<div className="msgContainer line-preview">
|
|
135
296
|
<div className="sms-icon" style={{ width: '25px', height: '25px', background: '#2E89DF' }}></div>
|
|
136
297
|
<div className="message-pop align-left" style={{ background: '#ffffff', color: '#333333' }}>
|
|
137
|
-
{ (content && content.bodyImage) ? <
|
|
298
|
+
{ (content && content.bodyImage) ? <CapImage src={content.bodyImage} alt="ddd" style={{maxWidth: '100%'}}/> : '' }
|
|
138
299
|
{ (content && content.bodyText) ? content.bodyText : ''}
|
|
139
300
|
</div>
|
|
140
301
|
</div>
|
|
@@ -149,7 +310,18 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
149
310
|
{smsDetails.unicode &&
|
|
150
311
|
<div style={{fontSize: '16px'}}>{`${this.props.intl.formatMessage(messages.smsFormatType)}`}</div>
|
|
151
312
|
}
|
|
152
|
-
<div style={{marginTop: '8px', fontSize: '16px'
|
|
313
|
+
<div style={{marginTop: '8px', fontSize: '16px', display: 'inline-flex'}} >
|
|
314
|
+
{`${smsDetails.parts} ${this.props.intl.formatMessage(messages.sms)} (${smsDetails.chars_used} ${this.props.intl.formatMessage(messages.characters)})`}
|
|
315
|
+
{containsUnicodeContent &&
|
|
316
|
+
<CapTooltip
|
|
317
|
+
title={this.props.intl.formatMessage(
|
|
318
|
+
messages.unicodeIconTooltip,
|
|
319
|
+
)}
|
|
320
|
+
>
|
|
321
|
+
<CapIcon type="unicode" style={{ marginLeft: 4 }} />
|
|
322
|
+
</CapTooltip>
|
|
323
|
+
}
|
|
324
|
+
</div>
|
|
153
325
|
{smsDetails.optoutUrlPresent && <div style={{fontWeight: '100', fontSize: '12px'}}>
|
|
154
326
|
{`${this.props.intl.formatMessage(messages.includesOptoutTag)} (${smsDetails.optouturlLength} ${this.props.intl.formatMessage(messages.characters)})`}
|
|
155
327
|
</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,21 @@ 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
|
+
},
|
|
65
|
+
unicodeIconTooltip: {
|
|
66
|
+
id: `creatives.components.TemplatePreview.unicodeIconTooltip`,
|
|
67
|
+
defaultMessage:
|
|
68
|
+
'This message has unicode characters. This may affect the cost per message.',
|
|
69
|
+
},
|
|
49
70
|
});
|
|
@@ -109,13 +109,6 @@ export class Gallery extends React.Component { // eslint-disable-line react/pref
|
|
|
109
109
|
const message = getMessageObject('error', this.props.intl.formatMessage(messages.assetDeleteFailed), true);
|
|
110
110
|
this.props.globalActions.addMessageToQueue(message);
|
|
111
111
|
}
|
|
112
|
-
if ( nextProps.Gallery.itemDeleted || !nextProps.Gallery.assetUploading) {
|
|
113
|
-
const params = {
|
|
114
|
-
name: this.state.searchText,
|
|
115
|
-
sortBy: 'Most Recent',
|
|
116
|
-
};
|
|
117
|
-
this.getAllAssets({params}, true);
|
|
118
|
-
}
|
|
119
112
|
}
|
|
120
113
|
|
|
121
114
|
componentWillUnmount() {
|
|
@@ -237,18 +230,19 @@ export class Gallery extends React.Component { // eslint-disable-line react/pref
|
|
|
237
230
|
uploadImages(e, {files}) {
|
|
238
231
|
e.preventDefault();
|
|
239
232
|
const _URL = window.URL || window.webkitURL;
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
233
|
+
for (const file in files) {
|
|
234
|
+
if (files.hasOwnProperty(file)) {
|
|
235
|
+
const img = new Image();
|
|
236
|
+
const that = this;
|
|
237
|
+
img.src = _URL.createObjectURL(files[file]);
|
|
238
|
+
img.onload = function () {
|
|
239
|
+
const fileParams = {
|
|
240
|
+
width: this.width,
|
|
241
|
+
height: this.height,
|
|
242
|
+
};
|
|
243
|
+
that.props.actions.uploadAsset(files[file], 'image', fileParams);
|
|
249
244
|
};
|
|
250
|
-
|
|
251
|
-
};
|
|
245
|
+
}
|
|
252
246
|
}
|
|
253
247
|
}
|
|
254
248
|
|
|
@@ -381,10 +375,10 @@ export class Gallery extends React.Component { // eslint-disable-line react/pref
|
|
|
381
375
|
return (
|
|
382
376
|
<div>
|
|
383
377
|
{/*<Spin spinning={this.props.Gallery.assetUploading || this.props.Gallery.fetchingAllAssets}>*/}
|
|
384
|
-
|
|
385
|
-
|
|
378
|
+
<Helmet
|
|
379
|
+
title={this.props.intl.formatMessage(messages.gallery)}
|
|
386
380
|
/>
|
|
387
|
-
|
|
381
|
+
{/* this.props.location.query.type !== 'embedded' && <Row style={{marginBottom: '16px'}}>
|
|
388
382
|
<Col>
|
|
389
383
|
<Breadcrumb>
|
|
390
384
|
<Breadcrumb.Item>Campaigns</Breadcrumb.Item>
|
|
@@ -394,49 +388,49 @@ export class Gallery extends React.Component { // eslint-disable-line react/pref
|
|
|
394
388
|
</Col>
|
|
395
389
|
</Row> */}
|
|
396
390
|
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
</div>
|
|
391
|
+
{!this.state.showEmbeddedPreview && <PageHeader pageHeading={pageHeading} actionComponents={actionComponents} />}
|
|
392
|
+
|
|
393
|
+
{this.state.showEmbeddedPreview ?
|
|
394
|
+
<div className="embedded-preview-wrapper">
|
|
395
|
+
<div className="embedded-preview-header" onClick={this.hideEmbeddedPreviewMode}>
|
|
396
|
+
<p className="embedded-preview-header-wrapper" style={{display: 'inline-flex'}}>
|
|
397
|
+
<i className="material-icons">arrow_back</i>
|
|
398
|
+
<span className="embedded-preview-header-text">
|
|
399
|
+
<FormattedMessage {...messages.backToGallery} />
|
|
400
|
+
</span>
|
|
401
|
+
</p>
|
|
402
|
+
</div>
|
|
403
|
+
<div style={{height: "75vh", width: '100%'}}>
|
|
404
|
+
<div style={{overflow: 'hidden', textAlign: 'center'}}>
|
|
405
|
+
<div style={{ display: 'table', height: '75vh', width: '85vw', background: 'url(https://s3.amazonaws.com/test_files_cache_bkp/intouch_creative_assets/1720b7f7e78860c1f905.svg)' }}>
|
|
406
|
+
<div style={{ height: "75vh", display: 'table-cell', verticalAlign: 'middle' }}>
|
|
407
|
+
<img style={{maxWidth: '100%', maxHeight: '100%'}} src={this.state.selectedAsset.metaInfo.secure_file_path ? this.state.selectedAsset.metaInfo.secure_file_path : this.state.selectedAsset.metaInfo.public_url} alt={this.state.selectedAsset.name} />
|
|
415
408
|
</div>
|
|
416
|
-
<a href={this.state.selectedAsset.metaInfo.public_url} target="_blank" style={{ position: 'fixed', right: '24px', bottom: '17vh' }} ><i className="material-icons" style={{ color: '#2E89DF', cursor: 'pointer' }}>fullscreen</i></a>
|
|
417
|
-
</div>
|
|
418
|
-
<div style={{ fontSize: '14px', color: '#333333', lineHeight: '24px', fontFamily: 'OpenSans', textAlign: 'center', paddingTop: '10px'}}>
|
|
419
|
-
<p><span><FormattedMessage {...messages.dimensions} />: </span> <span>{`${this.state.selectedAsset.metaInfo.width}X${this.state.selectedAsset.metaInfo.height} px`}</span></p>
|
|
420
|
-
<p><span><FormattedMessage {...messages.size} />: </span> <span>{this.state.selectedAsset.metaInfo.file_size}</span></p>
|
|
421
|
-
<p><span><FormattedMessage {...messages.uploadedOn} />: </span> <span>{moment(this.state.selectedAsset.updatedAt).format('DD MMM YYYY hh:mm A')}</span></p>
|
|
422
|
-
{/* <p><span>URL: </span> <span>{this.state.selectedAsset.metaInfo.publicUrl}</span></p> */}
|
|
423
409
|
</div>
|
|
410
|
+
<a href={this.state.selectedAsset.metaInfo.public_url} target="_blank" style={{ position: 'fixed', right: '24px', bottom: '17vh' }} ><i className="material-icons" style={{ color: '#2E89DF', cursor: 'pointer' }}>fullscreen</i></a>
|
|
411
|
+
</div>
|
|
412
|
+
<div style={{ fontSize: '14px', color: '#333333', lineHeight: '24px', fontFamily: 'OpenSans', textAlign: 'center', paddingTop: '10px'}}>
|
|
413
|
+
<p><span><FormattedMessage {...messages.dimensions} />: </span> <span>{`${this.state.selectedAsset.metaInfo.width}X${this.state.selectedAsset.metaInfo.height} px`}</span></p>
|
|
414
|
+
<p><span><FormattedMessage {...messages.size} />: </span> <span>{this.state.selectedAsset.metaInfo.file_size}</span></p>
|
|
415
|
+
<p><span><FormattedMessage {...messages.uploadedOn} />: </span> <span>{moment(this.state.selectedAsset.updatedAt).format('DD MMM YYYY hh:mm A')}</span></p>
|
|
416
|
+
{/* <p><span>URL: </span> <span>{this.state.selectedAsset.metaInfo.publicUrl}</span></p> */}
|
|
424
417
|
</div>
|
|
425
|
-
</div>
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
418
|
+
</div>
|
|
419
|
+
</div> :
|
|
420
|
+
<Spin spinning={this.props.Gallery.assetUploading || this.props.Gallery.fetchingAllAssets}>
|
|
421
|
+
<Pagination onPageChange={() => { this.getAllAssets({getNextPage: true}); }} paginationSelector="pagination-container">
|
|
422
|
+
<CardGrid
|
|
423
|
+
listItem={this.prepareData()}
|
|
424
|
+
filterContent={filterContent}
|
|
425
|
+
onHoverItem={this.handleOnHoverItem}
|
|
426
|
+
onItemClick={this.handleOnHoverItem}
|
|
427
|
+
colNumber={this.props.location.query.type === 'embedded' ? 2 : 4}
|
|
428
|
+
enablePagination
|
|
435
429
|
/>
|
|
436
|
-
|
|
437
|
-
|
|
430
|
+
</Pagination>
|
|
431
|
+
</Spin>
|
|
438
432
|
}
|
|
439
|
-
|
|
433
|
+
{this.state.showImagePreviewModal && this.renderAssetPreviewModal()}
|
|
440
434
|
{/*</Spin>*/}
|
|
441
435
|
</div>
|
|
442
436
|
);
|
package/containers/Cap/index.js
CHANGED
|
@@ -75,6 +75,7 @@ export class Cap extends React.Component { // eslint-disable-line react/prefer-s
|
|
|
75
75
|
this.props.locationActions.changeLocale(locale);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
|
|
78
79
|
componentWillReceiveProps(nextProps) {
|
|
79
80
|
const user = this.props.Global.user;
|
|
80
81
|
const nextPropsUser = nextProps.Global.user;
|
package/index.js
CHANGED
|
@@ -43,6 +43,10 @@ import Facebook from './v2Containers/Facebook';
|
|
|
43
43
|
import facebookReducer from './v2Containers/Facebook/reducer';
|
|
44
44
|
import facebookSaga from './v2Containers/Facebook/sagas';
|
|
45
45
|
|
|
46
|
+
import Gallery from './v2Containers/Assets/Gallery';
|
|
47
|
+
import galleryReducer from './v2Containers/Assets/Gallery/reducer';
|
|
48
|
+
import gallerySagas from './v2Containers/Assets/Gallery/sagas';
|
|
49
|
+
|
|
46
50
|
import MobilepushCreate from './v2Containers/MobilePush/Create';
|
|
47
51
|
import mobilepushCreateReducer from './v2Containers/MobilePush/Create/reducer';
|
|
48
52
|
import mobilepushCreateSaga from './v2Containers/MobilePush/Create/sagas';
|
|
@@ -86,6 +90,7 @@ const LineCreateContainer = {LineCreate, lineCreateReducer, lineCreateSaga};
|
|
|
86
90
|
const LineEditContainer = {LineEdit, lineEditReducer, lineEditSaga};
|
|
87
91
|
const TemplatesV2Container = {TemplatesV2, templateReducer, templateSaga};
|
|
88
92
|
const FacebookContainer = {Facebook, facebookReducer, facebookSaga};
|
|
93
|
+
const GalleryContainer = {Gallery, galleryReducer, gallerySagas};
|
|
89
94
|
|
|
90
95
|
export {default as TagList} from './v2Containers/TagList/index';
|
|
91
96
|
export {default as TagListSaga} from './v2Containers/TagList/sagas';
|
|
@@ -123,4 +128,5 @@ export { CapContainer,
|
|
|
123
128
|
CreativesContainer,
|
|
124
129
|
updateCharCount,
|
|
125
130
|
FacebookContainer,
|
|
131
|
+
GalleryContainer,
|
|
126
132
|
};
|
package/package.json
CHANGED
package/routes.js
CHANGED
|
@@ -630,6 +630,8 @@ export default function createRoutes(store) {
|
|
|
630
630
|
import('v2Containers/Assets/Gallery/sagas'),
|
|
631
631
|
import('v2Containers/Facebook/sagas'),
|
|
632
632
|
import('v2Containers/Facebook/reducer'),
|
|
633
|
+
import('v2Containers/Line/Create/sagas'),
|
|
634
|
+
import('v2Containers/Line/Create/reducer'),
|
|
633
635
|
]);
|
|
634
636
|
|
|
635
637
|
const renderRoute = loadModule(cb);
|
|
@@ -648,6 +650,7 @@ export default function createRoutes(store) {
|
|
|
648
650
|
weChatRichmediaTemplatesEditSagas, weChatRichmediaTemplatesEditReducer,
|
|
649
651
|
galleryReducer, gallerySagas,
|
|
650
652
|
facebookSagas, facebookReducer,
|
|
653
|
+
lineCreateSagas, lineCreateReducer,
|
|
651
654
|
]) => {
|
|
652
655
|
injectReducer('templates', reducer.default);
|
|
653
656
|
injectReducer('cap', capReducer.default);
|
|
@@ -663,6 +666,7 @@ export default function createRoutes(store) {
|
|
|
663
666
|
injectReducer('weChatRichmediaEdit', weChatRichmediaTemplatesEditReducer.default);
|
|
664
667
|
injectReducer('gallery', galleryReducer.default);
|
|
665
668
|
injectReducer('facebook', facebookReducer.default);
|
|
669
|
+
injectReducer('lineCreate', lineCreateReducer.default);
|
|
666
670
|
injectSagas(gallerySagas.default);
|
|
667
671
|
injectSagas(sagas.default);
|
|
668
672
|
injectSagas(capSagas.default);
|
|
@@ -676,6 +680,7 @@ export default function createRoutes(store) {
|
|
|
676
680
|
injectSagas(weChatRichmediaTemplatesCreateSagas.default);
|
|
677
681
|
injectSagas(weChatRichmediaTemplatesEditSagas.default);
|
|
678
682
|
injectSagas(facebookSagas.default);
|
|
683
|
+
injectSagas(lineCreateSagas.default);
|
|
679
684
|
renderRoute(component);
|
|
680
685
|
});
|
|
681
686
|
importModules.catch(errorLoading);
|
package/services/getSchema.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {SMS, EMAIL, MOBILE_PUSH, WECHAT} from '../v2Containers/CreativesContainer/constants';
|
|
1
|
+
import {SMS, EMAIL, MOBILE_PUSH, WECHAT, LINE} from '../v2Containers/CreativesContainer/constants';
|
|
2
2
|
export default function getSchema(channel) {
|
|
3
3
|
let schemaPath = '../containers/';
|
|
4
4
|
switch (channel.toUpperCase()) {
|
|
@@ -14,6 +14,9 @@ export default function getSchema(channel) {
|
|
|
14
14
|
case WECHAT:
|
|
15
15
|
schemaPath = import(`../v2Containers/WeChat/MapTemplates/initialSchema`);
|
|
16
16
|
break;
|
|
17
|
+
case LINE:
|
|
18
|
+
schemaPath = import(`../v2Containers/Line/Create/initialSchema`);
|
|
19
|
+
break;
|
|
17
20
|
default:
|
|
18
21
|
schemaPath = import(`../v2Containers/Sms/initialSchema`);
|
|
19
22
|
}
|