@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.
Files changed (66) hide show
  1. package/assets/lineImageTemplate.png +0 -0
  2. package/components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +7 -7
  3. package/components/TemplatePreview/_templatePreview.scss +287 -20
  4. package/components/TemplatePreview/assets/images/home-screen-android.svg +21 -0
  5. package/components/TemplatePreview/assets/images/home-screen-ios.svg +16 -0
  6. package/components/TemplatePreview/assets/images/sms_mobile_android.svg +22 -0
  7. package/components/TemplatePreview/assets/images/sms_mobile_ios.svg +16 -0
  8. package/components/TemplatePreview/assets/images/wechat_mobile_android.svg +20 -0
  9. package/components/TemplatePreview/index.js +203 -31
  10. package/components/TemplatePreview/messages.js +21 -0
  11. package/containers/Assets/Gallery/index.js +53 -59
  12. package/containers/Cap/index.js +1 -0
  13. package/index.js +6 -0
  14. package/package.json +1 -1
  15. package/routes.js +5 -0
  16. package/services/getSchema.js +4 -1
  17. package/translations/en.json +40 -4
  18. package/translations/zh.json +39 -3
  19. package/v2Components/FormBuilder/index.js +188 -37
  20. package/v2Components/FormBuilder/messages.js +16 -0
  21. package/v2Components/MobilePushPreviewV2/index.js +44 -36
  22. package/v2Components/MobilePushPreviewV2/messages.js +0 -8
  23. package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/_wechatRichmediaTemplatePrev.scss +64 -0
  24. package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +100 -18
  25. package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/messages.js +12 -0
  26. package/v2Components/TemplatePreview/_templatePreview.scss +24 -4
  27. package/v2Components/TemplatePreview/assets/images/home-screen-android.svg +21 -0
  28. package/v2Components/TemplatePreview/assets/images/home-screen-ios.svg +16 -0
  29. package/v2Components/TemplatePreview/assets/images/sms_mobile_android.svg +22 -0
  30. package/v2Components/TemplatePreview/assets/images/wechat-home-screen-android.svg +21 -0
  31. package/v2Components/TemplatePreview/assets/images/wechat_mobile_android.svg +20 -0
  32. package/v2Components/TemplatePreview/index.js +162 -23
  33. package/v2Components/TemplatePreview/messages.js +8 -0
  34. package/v2Containers/Assets/Gallery/index.js +54 -48
  35. package/v2Containers/CreativesContainer/SlideBoxContent.js +87 -4
  36. package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -1
  37. package/v2Containers/CreativesContainer/index.js +58 -2
  38. package/v2Containers/CreativesContainer/messages.js +2 -2
  39. package/v2Containers/Email/_email.scss +7 -1
  40. package/v2Containers/Email/index.js +40 -14
  41. package/v2Containers/Email/messages.js +4 -0
  42. package/v2Containers/Email/reducer.js +1 -0
  43. package/v2Containers/EmailWrapper/index.js +7 -5
  44. package/v2Containers/Line/Create/_lineCreate.scss +40 -19
  45. package/v2Containers/Line/Create/actions.js +13 -9
  46. package/v2Containers/Line/Create/index.js +498 -237
  47. package/v2Containers/Line/Create/initialSchema.js +378 -0
  48. package/v2Containers/Line/Create/messages.js +42 -2
  49. package/v2Containers/Line/Create/sagas.js +10 -4
  50. package/v2Containers/Line/Create/selectors.js +3 -9
  51. package/v2Containers/Line/CreateWrapper/constants.js +2 -0
  52. package/v2Containers/Line/CreateWrapper/index.js +117 -0
  53. package/v2Containers/Line/CreateWrapper/messages.js +55 -0
  54. package/v2Containers/MobilePush/Create/index.js +5 -0
  55. package/v2Containers/MobilePush/Edit/index.js +5 -0
  56. package/v2Containers/MobilepushWrapper/index.js +4 -1
  57. package/v2Containers/Sms/Create/index.js +2 -1
  58. package/v2Containers/Sms/Edit/index.js +2 -0
  59. package/v2Containers/Templates/_templates.scss +24 -1
  60. package/v2Containers/Templates/actions.js +7 -0
  61. package/v2Containers/Templates/constants.js +2 -0
  62. package/v2Containers/Templates/index.js +118 -15
  63. package/v2Containers/Templates/messages.js +8 -0
  64. package/v2Containers/Templates/reducer.js +2 -0
  65. package/v2Containers/TemplatesV2/index.js +5 -4
  66. 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-react-ui-library';
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
- <div className="shell align-center" id="sms-preview">
57
- <img className="preview-image sms" src={smsBody} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
58
- <div className="msgContainer sms">
59
- <img className="sms-icon" src={smsIcon} alt={this.props.intl.formatMessage(messages.smsIcon)} />
60
- <div className={"message-pop sms"}>
61
- {content && content.length && content.map((msg) =>
62
- <CapColumn className="message-pop-item align-left" style={{ background: '#3F51B5', color: '#ffffff'}}>
63
- {msg}
64
- </CapColumn>)
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
- </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)}/>
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
- <img className="preview-image" src={this.props.device === "android" ? androidPushMessagePhone : iPhonePushMessagePhone} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
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
- <img src={content.bodyImage} alt="" />
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
- <img src={content.bodyImage} alt=""/>
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
- <img className="preview-image" src={wechatBody} alt={this.props.intl.formatMessage(messages.previewGenerated)}/>
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) ? <img src={content.bodyImage} alt="ddd" style={{maxWidth: '100%'}}/> : '' }
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'}} >{`${smsDetails.parts} ${this.props.intl.formatMessage(messages.sms)} (${smsDetails.chars_used} ${this.props.intl.formatMessage(messages.characters)})`}</div>
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
- //const file = files[0];
241
- for (let file in files){
242
- const img = new Image();
243
- const that = this;
244
- img.src = _URL.createObjectURL(files[file]);
245
- img.onload = function () {
246
- const fileParams = {
247
- width: this.width,
248
- height: this.height,
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
- that.props.actions.uploadAsset(files[file], 'image', fileParams);
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
- <Helmet
385
- title={this.props.intl.formatMessage(messages.gallery)}
378
+ <Helmet
379
+ title={this.props.intl.formatMessage(messages.gallery)}
386
380
  />
387
- {/* this.props.location.query.type !== 'embedded' && <Row style={{marginBottom: '16px'}}>
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
- {!this.state.showEmbeddedPreview && <PageHeader pageHeading={pageHeading} actionComponents={actionComponents} />}
398
-
399
- {this.state.showEmbeddedPreview ?
400
- <div className="embedded-preview-wrapper">
401
- <div className="embedded-preview-header" onClick={this.hideEmbeddedPreviewMode}>
402
- <p className="embedded-preview-header-wrapper" style={{display: 'inline-flex'}}>
403
- <i className="material-icons">arrow_back</i>
404
- <span className="embedded-preview-header-text">
405
- <FormattedMessage {...messages.backToGallery} />
406
- </span>
407
- </p>
408
- </div>
409
- <div style={{height: "75vh", width: '100%'}}>
410
- <div style={{overflow: 'hidden', textAlign: 'center'}}>
411
- <div style={{ display: 'table', height: '75vh', width: '85vw', background: 'url(https://s3.amazonaws.com/test_files_cache_bkp/intouch_creative_assets/1720b7f7e78860c1f905.svg)' }}>
412
- <div style={{ height: "75vh", display: 'table-cell', verticalAlign: 'middle' }}>
413
- <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} />
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
- <Spin spinning={this.props.Gallery.assetUploading || this.props.Gallery.fetchingAllAssets}>
427
- <Pagination onPageChange={() => { this.getAllAssets({getNextPage: true}); }} paginationSelector="pagination-container">
428
- <CardGrid
429
- listItem={this.prepareData()}
430
- filterContent={filterContent}
431
- onHoverItem={this.handleOnHoverItem}
432
- onItemClick={this.handleOnHoverItem}
433
- colNumber={this.props.location.query.type === 'embedded' ? 2 : 4}
434
- enablePagination
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
- </Pagination>
437
- </Spin>
430
+ </Pagination>
431
+ </Spin>
438
432
  }
439
- {this.state.showImagePreviewModal && this.renderAssetPreviewModal()}
433
+ {this.state.showImagePreviewModal && this.renderAssetPreviewModal()}
440
434
  {/*</Spin>*/}
441
435
  </div>
442
436
  );
@@ -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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capillarytech/creatives-library",
3
3
  "author": "meharaj",
4
- "version": "3.10.0",
4
+ "version": "3.11.0",
5
5
  "description": "Capillary creatives ui",
6
6
  "main": "./index.js",
7
7
  "module": "./index.es.js",
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);
@@ -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
  }