@capillarytech/creatives-library 3.6.8 → 3.6.9
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 +8 -7
- package/components/TemplatePreview/_templatePreview.scss +21 -280
- package/components/TemplatePreview/index.js +20 -180
- package/components/TemplatePreview/messages.js +0 -16
- package/package.json +1 -1
- package/v2Components/FormBuilder/index.js +6 -15
- 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 +19 -101
- package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/messages.js +0 -12
- package/v2Components/TemplatePreview/_templatePreview.scss +4 -13
- package/v2Components/TemplatePreview/assets/images/WECHAT_5x.png +0 -0
- package/v2Components/TemplatePreview/index.js +20 -147
- package/v2Components/TemplatePreview/messages.js +0 -8
- package/v2Containers/CreativesContainer/SlideBoxContent.js +2 -15
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -1
- package/v2Containers/CreativesContainer/index.js +1 -3
- package/v2Containers/CreativesContainer/messages.js +2 -2
- package/v2Containers/Email/_email.scss +1 -7
- package/v2Containers/Email/index.js +13 -39
- package/v2Containers/Email/messages.js +0 -4
- package/v2Containers/EmailWrapper/index.js +0 -4
- 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
|
@@ -8,145 +8,18 @@ import PropTypes from 'prop-types';
|
|
|
8
8
|
|
|
9
9
|
import React from 'react';
|
|
10
10
|
import _ from 'lodash';
|
|
11
|
-
import { injectIntl, intlShape
|
|
12
|
-
import {CapColumn
|
|
11
|
+
import { injectIntl, intlShape} from 'react-intl';
|
|
12
|
+
import {CapColumn} from '@capillarytech/cap-react-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');
|
|
22
17
|
const wechatBody = require('./assets/images/WECHAT_5x.png');
|
|
23
18
|
const smsBody = require('./assets/images/mobile.svg');
|
|
24
19
|
const androidPushMessagePhone = require('./assets/images/androidPushMessage.svg');
|
|
25
20
|
const iPhonePushMessagePhone = require('./assets/images/iPhonePushMessage.svg');
|
|
26
21
|
|
|
27
22
|
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
|
-
|
|
150
23
|
render() {
|
|
151
24
|
console.log('preview props', this.props);
|
|
152
25
|
let content = channel && channel.toLowerCase() === 'sms' ? [this.props.content] : this.props.content;
|
|
@@ -165,7 +38,6 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
165
38
|
//smsText = this.props.intl.formatMessage(messages.previewGenerationMessage);
|
|
166
39
|
//console.log('message text', smsText);
|
|
167
40
|
}
|
|
168
|
-
const showLockScreenPreview = !!this.props.showLockScreenPreview;
|
|
169
41
|
const type = this.props.location && this.props.location.query.type ? this.props.location.query.type : '';
|
|
170
42
|
let iosActions = [];
|
|
171
43
|
if (channel.toLowerCase() === "mobilepush") {
|
|
@@ -180,67 +52,35 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
180
52
|
}
|
|
181
53
|
return (
|
|
182
54
|
<div className={`preview-container ${type === 'embedded' ? 'embedded-preview' : ''}`}>
|
|
183
|
-
{ channel && channel.toLowerCase() === 'sms' &&
|
|
184
|
-
|
|
185
|
-
|
|
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)}/>
|
|
55
|
+
{ channel && channel.toLowerCase() === 'sms' &&
|
|
56
|
+
<div className="shell align-center" id="sms-preview">
|
|
57
|
+
<img className="preview-image sms" src={smsBody} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
203
58
|
<div className="msgContainer sms">
|
|
59
|
+
<img className="sms-icon" src={smsIcon} alt={this.props.intl.formatMessage(messages.smsIcon)} />
|
|
204
60
|
<div className={"message-pop sms"}>
|
|
205
61
|
{content && content.length && content.map((msg) =>
|
|
206
|
-
<CapColumn className="message-pop-item align-left" style={{ background: '#
|
|
62
|
+
<CapColumn className="message-pop-item align-left" style={{ background: '#3F51B5', color: '#ffffff'}}>
|
|
207
63
|
{msg}
|
|
208
64
|
</CapColumn>)
|
|
209
65
|
}
|
|
210
66
|
</div>
|
|
211
67
|
</div>
|
|
212
|
-
</div>
|
|
213
|
-
|
|
214
|
-
{channel && channel.toLowerCase() === 'wechat'
|
|
215
|
-
(
|
|
216
|
-
<
|
|
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)}/>
|
|
68
|
+
</div>
|
|
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)}/>
|
|
234
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)} />}
|
|
235
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}
|
|
236
76
|
</div>
|
|
237
77
|
</div>
|
|
238
78
|
</div>
|
|
239
|
-
)
|
|
240
|
-
|
|
79
|
+
) : ''
|
|
80
|
+
}
|
|
241
81
|
{ channel && (channel.toLowerCase() === 'mobilepush') &&
|
|
242
82
|
(<div className="shell align-center" id="mobilepush-preview">
|
|
243
|
-
<
|
|
83
|
+
<img className="preview-image" src={this.props.device === "android" ? androidPushMessagePhone : iPhonePushMessagePhone} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
244
84
|
{(!!content.header || !!content.bodyText || !!content.bodyImage) &&
|
|
245
85
|
<div className={`${this.props.device}-push-message-Container`}>
|
|
246
86
|
{this.props.device === "android" ?
|
|
@@ -255,7 +95,7 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
255
95
|
{content.bodyText}
|
|
256
96
|
</div>
|
|
257
97
|
{content.bodyImage && <div className="body-image">
|
|
258
|
-
<
|
|
98
|
+
<img src={content.bodyImage} alt="" />
|
|
259
99
|
</div>}
|
|
260
100
|
{content.actions.filter((action) => action.label).length ?
|
|
261
101
|
<div className="actions">
|
|
@@ -271,7 +111,7 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
271
111
|
<span className="app-icon"></span>{content.appName ? content.appName : "App name"} <i className="material-icons">{this.props.intl.formatMessage(messages.close)}</i>
|
|
272
112
|
</div>
|
|
273
113
|
{content.bodyImage && <div className="body-image">
|
|
274
|
-
<
|
|
114
|
+
<img src={content.bodyImage} alt=""/>
|
|
275
115
|
</div>}
|
|
276
116
|
<div className="title">
|
|
277
117
|
{content.header}
|
|
@@ -290,11 +130,11 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
290
130
|
{
|
|
291
131
|
channel && channel.toLowerCase() === 'line' ? (
|
|
292
132
|
<div className="shell align-center" id="sms-preview">
|
|
293
|
-
<
|
|
133
|
+
<img className="preview-image" src={wechatBody} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
|
|
294
134
|
<div className="msgContainer">
|
|
295
135
|
<div className="sms-icon" style={{ width: '25px', height: '25px', background: '#2E89DF' }}></div>
|
|
296
136
|
<div className="message-pop align-left" style={{ background: '#ffffff', color: '#333333' }}>
|
|
297
|
-
{ (content && content.bodyImage) ? <
|
|
137
|
+
{ (content && content.bodyImage) ? <img src={content.bodyImage} alt="ddd" style={{maxWidth: '100%'}}/> : '' }
|
|
298
138
|
{ (content && content.bodyText) ? content.bodyText : ''}
|
|
299
139
|
</div>
|
|
300
140
|
</div>
|
|
@@ -10,10 +10,6 @@ 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
|
-
},
|
|
17
13
|
sms: {
|
|
18
14
|
id: 'creatives.components.TemplatePreview.sms',
|
|
19
15
|
defaultMessage: "SMS",
|
|
@@ -50,16 +46,4 @@ export default defineMessages({
|
|
|
50
46
|
id: 'creatives.components.TemplatePreview.smsIcon',
|
|
51
47
|
defaultMessage: 'Sms Icon',
|
|
52
48
|
},
|
|
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
49
|
});
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@ import PropTypes from 'prop-types';
|
|
|
11
11
|
import React from 'react';
|
|
12
12
|
import _ from 'lodash';
|
|
13
13
|
import { Tabs, Table, Modal} from 'antd';
|
|
14
|
-
import { CapButton, CapInput, CapPopover,
|
|
14
|
+
import { CapButton, CapInput, CapPopover, CapCheckbox, CapRadio, CapSelect, CapTable, CapRow, CapColumn, CapNotification, CapUploader, CapHeading, CapIcon} from '@capillarytech/cap-ui-library';
|
|
15
15
|
import { injectIntl, intlShape, FormattedMessage } from 'react-intl';
|
|
16
16
|
import LabelHOC from '@capillarytech/cap-ui-library/assets/HOCs/ComponentWithLabelHOC';
|
|
17
17
|
import TemplatePreview from '../TemplatePreview';
|
|
@@ -2154,7 +2154,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
2154
2154
|
//
|
|
2155
2155
|
const imgSrc = template && template.versions && template.versions.base ? template.versions.base.preview_http_url : '';
|
|
2156
2156
|
// const ifPreviewGenerated = template && template.versions && template.versions.base ? template.versions.base.isPreviewGenerated : 0;
|
|
2157
|
-
const content = <
|
|
2157
|
+
const content = <img src={imgSrc || ''} alt="" />;
|
|
2158
2158
|
|
|
2159
2159
|
temp.content = (
|
|
2160
2160
|
<div
|
|
@@ -2339,10 +2339,8 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
2339
2339
|
content={content}
|
|
2340
2340
|
charCounterEnabled={val.charCounterEnabled}
|
|
2341
2341
|
unicodeEnabled={unicodeEnabled}
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
onTestContentClicked={this.props.onTestContentClicked}
|
|
2345
|
-
/>
|
|
2342
|
+
>
|
|
2343
|
+
</TemplatePreview>
|
|
2346
2344
|
</CapColumn>
|
|
2347
2345
|
);
|
|
2348
2346
|
break;
|
|
@@ -2708,7 +2706,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
2708
2706
|
<div>
|
|
2709
2707
|
<div className={`image-container ${ifError ? 'error' : ''}`}>
|
|
2710
2708
|
{self.state && !!self.state.formData[`${self.state.currentTab - 1}`].image ?
|
|
2711
|
-
<
|
|
2709
|
+
<img src={self.state.formData[`${self.state.currentTab - 1}`].image} alt={val.alt} style={val.style}/>
|
|
2712
2710
|
:
|
|
2713
2711
|
<div style={{width: "100%", textAlign: "center"}}><span className="image-placeholder">{val.placeholder}</span></div>
|
|
2714
2712
|
}
|
|
@@ -2724,7 +2722,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
2724
2722
|
<div key={`${val.id}-${this.state.currentTab}`}>
|
|
2725
2723
|
<div className={`image-container ${props.ifError ? 'error' : ''}`}>
|
|
2726
2724
|
{self.state && !!self.state.formData[`${self.state.currentTab - 1}`].image ?
|
|
2727
|
-
<
|
|
2725
|
+
<img src={self.state.formData[`${self.state.currentTab - 1}`].image} alt={props.alt} style={props.style}/>
|
|
2728
2726
|
:
|
|
2729
2727
|
<div style={{width: "100%", textAlign: "center"}}><span className="image-placeholder">{props.placeholder}</span></div>
|
|
2730
2728
|
}
|
|
@@ -2836,9 +2834,6 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
2836
2834
|
content={content}
|
|
2837
2835
|
charCounterEnabled={val.charCounterEnabled}
|
|
2838
2836
|
unicodeEnabled={unicodeEnabled}
|
|
2839
|
-
showTestAndPreviewIcon
|
|
2840
|
-
onPreviewContentClicked={this.props.onPreviewContentClicked}
|
|
2841
|
-
onTestContentClicked={this.props.onTestContentClicked}
|
|
2842
2837
|
>
|
|
2843
2838
|
</TemplatePreview>
|
|
2844
2839
|
</CapColumn>
|
|
@@ -2888,10 +2883,6 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
2888
2883
|
],
|
|
2889
2884
|
appName: val.content.appName,
|
|
2890
2885
|
}}
|
|
2891
|
-
showTestAndPreviewIcon
|
|
2892
|
-
onPreviewContentClicked={this.props.onPreviewContentClicked}
|
|
2893
|
-
onTestContentClicked={this.props.onTestContentClicked}
|
|
2894
|
-
templateDataRaw={this.props.templateData}
|
|
2895
2886
|
>
|
|
2896
2887
|
</TemplatePreview>
|
|
2897
2888
|
</CapColumn>
|
|
@@ -7,10 +7,16 @@
|
|
|
7
7
|
import PropTypes from 'prop-types';
|
|
8
8
|
|
|
9
9
|
import React from 'react';
|
|
10
|
-
import {
|
|
10
|
+
import { CapButton } from '@capillarytech/cap-ui-library';
|
|
11
|
+
// import styled from 'styled-components';
|
|
12
|
+
|
|
13
|
+
import { FormattedMessage } from 'react-intl';
|
|
14
|
+
import { Button } from 'antd';
|
|
11
15
|
import { get, map, isEmpty} from 'lodash';
|
|
12
16
|
import TemplatePreview from '../TemplatePreview';
|
|
13
17
|
import '../PreviewSideBar/_previewsidebar.scss';
|
|
18
|
+
import messages from './messages';
|
|
19
|
+
const ButtonGroup = Button.Group;
|
|
14
20
|
|
|
15
21
|
class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react/prefer-stateless-function
|
|
16
22
|
constructor(props) {
|
|
@@ -18,9 +24,6 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
|
|
|
18
24
|
this.goToEdit = this.goToEdit.bind(this);
|
|
19
25
|
this.goToDuplicate = this.goToDuplicate.bind(this);
|
|
20
26
|
this.changeDevice = this.changeDevice.bind(this);
|
|
21
|
-
this.getPreview = this.getPreview.bind(this);
|
|
22
|
-
this.setContent = this.setContent.bind(this);
|
|
23
|
-
this.goToDuplicate = this.goToDuplicate.bind(this);
|
|
24
27
|
const hasAndroid = get(props, 'templateData.versions.base.ANDROID') || get(props, 'templateData.androidContent');
|
|
25
28
|
const hasIos = get(props, 'templateData.versions.base.IOS') || get(props, 'templateData.iosContent');
|
|
26
29
|
let device = "android";
|
|
@@ -35,7 +38,7 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
|
|
|
35
38
|
};
|
|
36
39
|
}
|
|
37
40
|
|
|
38
|
-
setContent(templateData, device) {
|
|
41
|
+
setContent = (templateData, device) => {
|
|
39
42
|
const androidContent = get(templateData, 'versions.base.ANDROID') || get(templateData, 'androidContent');
|
|
40
43
|
const iosContent = get(templateData, 'versions.base.IOS') || get(templateData, 'iosContent');
|
|
41
44
|
|
|
@@ -56,21 +59,12 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
|
|
|
56
59
|
}
|
|
57
60
|
return content;
|
|
58
61
|
}
|
|
59
|
-
getPreview(device) {
|
|
60
|
-
return (
|
|
61
|
-
<TemplatePreview
|
|
62
|
-
device={device}
|
|
63
|
-
channel={this.props.channel}
|
|
64
|
-
content={this.state.content || ''}
|
|
65
|
-
templateData={this.props.templateData}
|
|
66
|
-
/>
|
|
67
|
-
);
|
|
68
|
-
}
|
|
69
62
|
goToDuplicate() {
|
|
70
63
|
this.props.onDuplicateClick(this.props.templateData);
|
|
71
64
|
this.props.handleClose();
|
|
72
65
|
}
|
|
73
|
-
changeDevice(
|
|
66
|
+
changeDevice(ev) {
|
|
67
|
+
const device = ev.target.value;
|
|
74
68
|
const content = this.setContent(this.props.templateData, device);
|
|
75
69
|
this.setState({device, content });
|
|
76
70
|
}
|
|
@@ -78,40 +72,38 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
|
|
|
78
72
|
this.props.onEditClick(e, this.props.templateData._id, this.props.templateData.modeType, path);
|
|
79
73
|
}
|
|
80
74
|
render() {
|
|
81
|
-
const {templateData} = this.props;
|
|
75
|
+
const {templateData, channel} = this.props;
|
|
76
|
+
|
|
82
77
|
const hasAndroid = get(templateData, 'versions.base.ANDROID') || get(templateData, 'androidContent');
|
|
83
78
|
const hasIos = get(templateData, 'versions.base.IOS') || get(templateData, 'iosContent');
|
|
84
|
-
|
|
79
|
+
|
|
80
|
+
const {device, content} = this.state;
|
|
85
81
|
|
|
86
82
|
return (
|
|
83
|
+
|
|
87
84
|
<div>
|
|
88
85
|
<div className="devices">
|
|
89
|
-
{!isEmpty(templateData) &&
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
content: this.getPreview('android'),
|
|
95
|
-
tab: <CapIcon type="android" size="m" />,
|
|
96
|
-
key: 'android',
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
content: this.getPreview('iphone'),
|
|
100
|
-
tab: <CapIcon type="ios" size="m" />,
|
|
101
|
-
key: 'iphone',
|
|
102
|
-
},
|
|
103
|
-
]}
|
|
104
|
-
onChange={(activeKey) => this.changeDevice(activeKey)}
|
|
105
|
-
tabBarStyle={{margin: 'auto', width: '38%'}}
|
|
106
|
-
/>
|
|
107
|
-
) : (
|
|
108
|
-
(hasAndroid || hasIos) && this.getPreview(hasAndroid ? 'android' : 'ios')
|
|
109
|
-
))
|
|
110
|
-
}
|
|
86
|
+
{!isEmpty(templateData) && hasAndroid && hasIos &&
|
|
87
|
+
<ButtonGroup onClick={this.changeDevice}>
|
|
88
|
+
<CapButton type={device === "android" ? "primary" : "secondary"} value={"android"}><FormattedMessage {...messages.android} /></CapButton>
|
|
89
|
+
<CapButton type={device === "iphone" ? "primary" : "secondary"} value={"iphone"}><FormattedMessage {...messages.ios} /></CapButton>
|
|
90
|
+
</ButtonGroup>}
|
|
111
91
|
</div>
|
|
92
|
+
<TemplatePreview
|
|
93
|
+
device={device === "android" ? "android" : "iphone"}
|
|
94
|
+
channel={channel}
|
|
95
|
+
content={content || ''}
|
|
96
|
+
templateData={templateData}
|
|
97
|
+
>
|
|
98
|
+
</TemplatePreview>
|
|
99
|
+
|
|
100
|
+
|
|
112
101
|
</div>
|
|
102
|
+
|
|
103
|
+
|
|
113
104
|
);
|
|
114
105
|
}
|
|
106
|
+
|
|
115
107
|
}
|
|
116
108
|
|
|
117
109
|
MobilePushPreviewV2.propTypes = {
|
|
@@ -10,4 +10,12 @@ export default defineMessages({
|
|
|
10
10
|
id: 'creatives.componentsv2.MobilePushPreviewV2.header',
|
|
11
11
|
defaultMessage: 'This is the MobilePushPreviewV2 component !',
|
|
12
12
|
},
|
|
13
|
+
android: {
|
|
14
|
+
id: 'creatives.componentsv2.MobilePushPreviewV2.android',
|
|
15
|
+
defaultMessage: 'Android',
|
|
16
|
+
},
|
|
17
|
+
ios: {
|
|
18
|
+
id: 'creatives.componentsv2.MobilePushPreviewV2.ios',
|
|
19
|
+
defaultMessage: 'IOS',
|
|
20
|
+
},
|
|
13
21
|
});
|
|
@@ -1,69 +1,5 @@
|
|
|
1
1
|
@import '~@capillarytech/cap-ui-library/styles/_variables.scss';
|
|
2
2
|
|
|
3
|
-
.shell-lock-screen-android .main-screen-preview .wechatMsgContainer{
|
|
4
|
-
position: absolute;
|
|
5
|
-
left: 53.5%;
|
|
6
|
-
top:28%;
|
|
7
|
-
background: white;
|
|
8
|
-
width: 19.5%;
|
|
9
|
-
text-align: left;
|
|
10
|
-
height: fit-content;
|
|
11
|
-
border-radius: 0.285rem;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
.shell-lock-screen-android .lock-screen-preview{
|
|
15
|
-
.wechat-android-sender-id{
|
|
16
|
-
position: absolute;
|
|
17
|
-
top: 46%;
|
|
18
|
-
font-size: 10px;
|
|
19
|
-
left: 28%;
|
|
20
|
-
}
|
|
21
|
-
.wechat-android-title{
|
|
22
|
-
position: absolute;
|
|
23
|
-
top: 49%;
|
|
24
|
-
font-size: 10px;
|
|
25
|
-
left: 28%;
|
|
26
|
-
color: #5e6c84;
|
|
27
|
-
}
|
|
28
|
-
.wechat-android-action-buttons{
|
|
29
|
-
position: absolute;
|
|
30
|
-
left: 28%;
|
|
31
|
-
top: 53%;
|
|
32
|
-
font-size: 10px;
|
|
33
|
-
color: #3861ca;
|
|
34
|
-
font-weight: 500;
|
|
35
|
-
}
|
|
36
|
-
.wechat-ios-sender-id{
|
|
37
|
-
position: absolute;
|
|
38
|
-
top: 44%;
|
|
39
|
-
font-size: 10px;
|
|
40
|
-
left: 28.5%;
|
|
41
|
-
}
|
|
42
|
-
.wechat-ios-title{
|
|
43
|
-
position: absolute;
|
|
44
|
-
top: 47%;
|
|
45
|
-
font-size: 10px;
|
|
46
|
-
left: 28.5%;
|
|
47
|
-
color: #5e6c84;
|
|
48
|
-
}
|
|
49
|
-
.wechat-ios-action-reply{
|
|
50
|
-
position: absolute;
|
|
51
|
-
left: 35%;
|
|
52
|
-
top: 59%;
|
|
53
|
-
font-size: 12px;
|
|
54
|
-
color: #3861ca;
|
|
55
|
-
font-weight: 500;
|
|
56
|
-
}
|
|
57
|
-
.wechat-ios-action-cancel{
|
|
58
|
-
position: absolute;
|
|
59
|
-
left: 34.5%;
|
|
60
|
-
top: 66%;
|
|
61
|
-
font-size: 12px;
|
|
62
|
-
color: #3861ca;
|
|
63
|
-
font-weight: 500;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
3
|
.wechatMsgContainer{
|
|
68
4
|
position: absolute;
|
|
69
5
|
left: 30%;
|