@capillarytech/creatives-library 7.12.15 → 7.12.17

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 (57) hide show
  1. package/index.js +6 -0
  2. package/package.json +1 -1
  3. package/routes.js +7 -2
  4. package/services/api.js +8 -2
  5. package/v2Components/CapImageUpload/index.js +27 -11
  6. package/v2Components/CapImageUpload/index.scss +12 -27
  7. package/v2Components/CapImageUpload/messages.js +10 -5
  8. package/v2Components/TemplatePreview/_templatePreview.scss +10 -0
  9. package/v2Components/TemplatePreview/assets/images/sms_mobile_ios.svg +18 -0
  10. package/v2Components/TemplatePreview/index.js +41 -1
  11. package/v2Components/TemplatePreview/tests/__snapshots__/index.test.js.snap +33 -1
  12. package/v2Components/TemplatePreview/tests/index.test.js +7 -7
  13. package/v2Containers/App/constants.js +2 -1
  14. package/v2Containers/Assets/images/addCreativesIllustration.svg +30 -0
  15. package/v2Containers/Assets/images/rcsIllustration.png +0 -0
  16. package/v2Containers/Cap/messages.js +20 -1
  17. package/v2Containers/CreativesContainer/SlideBoxContent.js +59 -11
  18. package/v2Containers/CreativesContainer/SlideBoxHeader.js +43 -33
  19. package/v2Containers/CreativesContainer/constants.js +1 -0
  20. package/v2Containers/CreativesContainer/index.js +53 -1
  21. package/v2Containers/CreativesContainer/messages.js +4 -0
  22. package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +24 -4
  23. package/v2Containers/CreativesContainer/tests/SlideBoxHeader.test.js +23 -4
  24. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +148 -2
  25. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxHeader.test.js.snap +98 -0
  26. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +71 -0
  27. package/v2Containers/CreativesContainer/tests/index.test.js +21 -9
  28. package/v2Containers/Facebook/Advertisement/index.js +4 -2
  29. package/v2Containers/MobilePush/Edit/index.js +21 -34
  30. package/v2Containers/Rcs/actions.js +57 -0
  31. package/v2Containers/Rcs/constants.js +51 -0
  32. package/v2Containers/Rcs/index.js +1076 -0
  33. package/v2Containers/Rcs/index.scss +72 -0
  34. package/v2Containers/Rcs/messages.js +122 -0
  35. package/v2Containers/Rcs/reducer.js +107 -0
  36. package/v2Containers/Rcs/sagas.js +141 -0
  37. package/v2Containers/Rcs/selectors.js +8 -0
  38. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +144496 -0
  39. package/v2Containers/Rcs/tests/index.test.js +226 -0
  40. package/v2Containers/Rcs/tests/mockData.js +166 -0
  41. package/v2Containers/Rcs/utils.js +40 -0
  42. package/v2Containers/SmsTrai/Edit/index.js +2 -0
  43. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -4
  44. package/v2Containers/Templates/_templates.scss +9 -1
  45. package/v2Containers/Templates/actions.js +2 -1
  46. package/v2Containers/Templates/constants.js +1 -0
  47. package/v2Containers/Templates/index.js +234 -174
  48. package/v2Containers/Templates/messages.js +20 -0
  49. package/v2Containers/Templates/reducer.js +2 -0
  50. package/v2Containers/Templates/tests/__snapshots__/index.test.js.snap +520 -80
  51. package/v2Containers/TemplatesV2/index.js +13 -4
  52. package/v2Containers/TemplatesV2/messages.js +4 -0
  53. package/v2Containers/Whatsapp/index.js +6 -2
  54. package/v2Containers/Whatsapp/messages.js +0 -13
  55. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +13 -1037
  56. package/v2Containers/Whatsapp/tests/__snapshots__/utils.test.js.snap +32 -26
  57. package/v2Containers/mockdata.js +1 -1
package/index.js CHANGED
@@ -91,6 +91,10 @@ import Whatsapp from './v2Containers/Whatsapp';
91
91
  import whatsappReducer from './v2Containers/Whatsapp/reducer';
92
92
  import whatsappSaga from './v2Containers/Whatsapp/sagas';
93
93
 
94
+ import Rcs from './v2Containers/Rcs';
95
+ import rcsReducer from './v2Containers/Rcs/reducer';
96
+ import rcsSaga from './v2Containers/Rcs/sagas';
97
+
94
98
  export {default as Ebill} from './v2Containers/Ebill';
95
99
  export {default as EbillReducer} from './v2Containers/Ebill/reducer';
96
100
  export {default as EbillSaga} from './v2Containers/Ebill/sagas';
@@ -116,6 +120,7 @@ const ViberContainer = {Viber, viberReducer, viberSaga};
116
120
  const FacebookPreviewContainer = { FacebookPreview, facebookPreviewReducer, facebookPreviewSaga };
117
121
  const SmsTraiContainer = {SmsTraiCreate, SmsTraiCreateReducer, SmsTraiCreateSaga};
118
122
  const WhatsappContainer = { Whatsapp, whatsappReducer, whatsappSaga };
123
+ const RcsContainer = { Rcs, rcsReducer, rcsSaga };
119
124
 
120
125
  const GalleryContainer = {Gallery, galleryReducer, gallerySagas};
121
126
  const FTPContainer = {FTP, FTPReducer, FTPSagas};
@@ -163,4 +168,5 @@ export { CapContainer,
163
168
  FacebookPreviewContainer,
164
169
  SmsTraiContainer,
165
170
  WhatsappContainer,
171
+ RcsContainer,
166
172
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capillarytech/creatives-library",
3
3
  "author": "meharaj",
4
- "version": "7.12.15",
4
+ "version": "7.12.17",
5
5
  "description": "Capillary creatives ui",
6
6
  "main": "./index.js",
7
7
  "module": "./index.es.js",
package/routes.js CHANGED
@@ -4,7 +4,6 @@
4
4
  // about the code splitting business
5
5
  import React from 'react';
6
6
  import { getAsyncInjectors } from 'utils/asyncInjectors';
7
- import pathConfig from './config/path'
8
7
  import * as rootSaga from 'containers/Cap/sagas';
9
8
  import * as smsSagas from 'containers/Sms/Create/sagas';
10
9
  import * as smsEditSagas from 'containers/Sms/Edit/sagas';
@@ -14,6 +13,7 @@ import * as emailSagas from 'containers/Email/sagas';
14
13
  import * as templateSagas from 'containers/Templates/sagas';
15
14
  import * as lineSagas from 'containers/Line/Create/sagas';
16
15
  import * as languageSaga from './v2Containers/LanguageProvider/sagas';
16
+ import pathConfig from './config/path';
17
17
 
18
18
  import {updateCharCount} from './utils/smsCharCountV2';
19
19
  const errorLoading = (err) => {
@@ -26,7 +26,7 @@ const loadModule = (cb) => (componentModule) => {
26
26
 
27
27
  const loadModuleWithProps = (cb) => (ComponentModule, props) => {
28
28
  cb(
29
- null,
29
+ null,
30
30
  () => <ComponentModule.default {...props} />
31
31
  );
32
32
  };
@@ -662,6 +662,8 @@ export default function createRoutes(store) {
662
662
  import('v2Containers/SmsTrai/Create/reducer'),
663
663
  import('v2Containers/Whatsapp/sagas'),
664
664
  import('v2Containers/Whatsapp/reducer'),
665
+ import('v2Containers/Rcs/sagas'),
666
+ import('v2Containers/Rcs/reducer'),
665
667
  ]);
666
668
 
667
669
  const renderRoute = loadModule(cb);
@@ -686,6 +688,7 @@ export default function createRoutes(store) {
686
688
  capFacebookPreviewSagas, capFacebookPreviewReducer,
687
689
  smsTraiSagas, smsTraiReducer,
688
690
  whatsappSagas, whatsappReducer,
691
+ rcsSagas, rcsReducer,
689
692
  ]) => {
690
693
  injectReducer('templates', reducer.default);
691
694
  injectReducer('cap', capReducer.default);
@@ -706,6 +709,7 @@ export default function createRoutes(store) {
706
709
  injectReducer('facebookPreview', capFacebookPreviewReducer.default);
707
710
  injectReducer('smsTrai', smsTraiReducer.default);
708
711
  injectReducer('whatsapp', whatsappReducer.default);
712
+ injectReducer('rcs', rcsReducer.default);
709
713
  injectSagas(gallerySagas.default);
710
714
  injectSagas(sagas.default);
711
715
  injectSagas(capSagas.default);
@@ -725,6 +729,7 @@ export default function createRoutes(store) {
725
729
  injectSagas(capFacebookPreviewSagas.default);
726
730
  injectSagas(smsTraiSagas.default);
727
731
  injectSagas(whatsappSagas.default);
732
+ injectSagas(rcsSagas.default);
728
733
  renderRoute(component);
729
734
  });
730
735
  importModules.catch(errorLoading);
package/services/api.js CHANGED
@@ -109,14 +109,14 @@ function request(url, options, handleUnauthorizedStatus) {
109
109
  }
110
110
  const fetchUrl = url.indexOf('?') !== -1 ? `${url}&time=${Date.now()}` : `${url}?time=${Date.now()}`;
111
111
  return fetch(fetchUrl, options)
112
- .then(response => {
112
+ .then((response) => {
113
113
  if (response.status === 403 && handleUnauthorizedStatus) {
114
114
  showSomethingwentWrong();
115
115
  }
116
116
  return checkStatus(response);
117
117
  })
118
118
  .then(parseJSON)
119
- .catch(error => error);
119
+ .catch((error) => error);
120
120
  }
121
121
 
122
122
  function getAPICallObject(method, body, isFileUpload = false, loadCampaignHeaders = false) {
@@ -259,6 +259,12 @@ export const createEbillTemplate = ({template}) => {
259
259
  return request(url, getAPICallObject('POST', template));
260
260
  };
261
261
 
262
+ export const createChannelWiseTemplate = ({ channel, template }) => {
263
+ const url = `${API_ENDPOINT}/templates/${channel}`;
264
+ return request(url, getAPICallObject('POST', template));
265
+ };
266
+
267
+
262
268
  export const getTemplateDetails = ({id, channel}) => {
263
269
  const url = `${API_ENDPOINT}/templates/${id}/${channel ? channel.toUpperCase() : 'SMS'}`;
264
270
  return request(url, getAPICallObject('GET'));
@@ -19,6 +19,7 @@ import { injectIntl, FormattedMessage, intlShape} from 'react-intl';
19
19
  import get from 'lodash/get';
20
20
  import './index.scss';
21
21
  import Gallery from '../../v2Containers/Assets/Gallery';
22
+ import { FACEBOOK, RCS } from "../../v2Containers/CreativesContainer/constants";
22
23
 
23
24
  import messages from './messages';
24
25
  function CapImageUpload(props) {
@@ -38,6 +39,8 @@ function CapImageUpload(props) {
38
39
  index,
39
40
  className,
40
41
  imageData,
42
+ channel,
43
+ channelSpecificStyle,
41
44
  } = props;
42
45
  const {
43
46
  formatMessage,
@@ -55,13 +58,16 @@ function CapImageUpload(props) {
55
58
  const [isDrawerRequired, updateDrawerRequirement] = useState(false);
56
59
 
57
60
  const {CapHeadingSpan} = CapHeading;
58
- const ImageComponent = useCallback(() => (<>
59
- <div
60
- className={`image-container upload ${props.ifError ? 'error' : ''}`}
61
- >
62
- {imageSrc !== "" && (<CapImage src={imageSrc || ""} alt="upload-image-src" height="400" />)}
63
- </div></>
64
- ), []);
61
+ const ImageComponent = useCallback(
62
+ () => (
63
+ <div className={`image-container upload ${props.ifError ? 'error' : ''}`}>
64
+ {imageSrc !== '' && (
65
+ <CapImage src={imageSrc || ''} alt="upload-image-src" height="400" />
66
+ )}
67
+ </div>
68
+ ),
69
+ [imageSrc],
70
+ );
65
71
 
66
72
  const WithLabel = LabelHOC(ImageComponent);
67
73
 
@@ -200,11 +206,12 @@ function CapImageUpload(props) {
200
206
  className="dragger-button re-upload"
201
207
  type="flat"
202
208
  onClick={onReUpload}
209
+ style={ channelSpecificStyle ? { marginTop:'-16px'} : {}}
203
210
  >
204
211
  <FormattedMessage {...messages.imageReUpload} />
205
212
  </CapButton>
206
213
  );
207
- }, [isImageError]);
214
+ }, [isImageError, imageSrc]);
208
215
 
209
216
  return (
210
217
  <div style={style} className="cap-custom-image-upload">
@@ -234,9 +241,16 @@ function CapImageUpload(props) {
234
241
  <CapHeadingSpan type="label2" className="image-dimension">
235
242
  <FormattedMessage {...messages.imageDimenstionDescription} values={{ width: imgWidth, height: imgHeight}}/>
236
243
  </CapHeadingSpan>
237
- <CapHeadingSpan type="label2" className="image-aspect-ratio">
238
- <FormattedMessage {...messages.aspectRatio} />
239
- </CapHeadingSpan>
244
+ {channel === FACEBOOK && (
245
+ <CapHeadingSpan type="label2" className="image-aspect-ratio">
246
+ <FormattedMessage {...messages.aspectRatio} />
247
+ </CapHeadingSpan>
248
+ )}
249
+ {channel === RCS && (
250
+ <CapHeadingSpan type="label2" className="image-size">
251
+ <FormattedMessage {...messages.imageSize} />
252
+ </CapHeadingSpan>
253
+ )}
240
254
  <CapHeadingSpan type="label2" className="image-format">
241
255
  <FormattedMessage {...messages.format} />
242
256
  </CapHeadingSpan>
@@ -261,6 +275,8 @@ CapImageUpload.propTypes = {
261
275
  updateOnReUpload: PropTypes.func,
262
276
  imageData: PropTypes.object,
263
277
  index: PropTypes.number,
278
+ channel: PropTypes.string,
279
+ channelSpecificStyle: PropTypes.bool,
264
280
  };
265
281
 
266
282
  export default injectIntl(CapImageUpload);
@@ -3,30 +3,15 @@
3
3
  $classPrefix: cap-custom-image-upload;
4
4
 
5
5
  .#{$classPrefix} {
6
- .image-container{
7
- .upload{
8
- margin-top: 20;
9
- background-color: $CAP_G09;
10
- }
11
- }
12
- .upload-image{
13
- margin-right: $CAP_SPACE_08
14
- }
15
- .gallery-select{
16
- margin-left: $CAP_SPACE_08
17
- }
18
- .image-format{
19
- float: right;
20
- }
21
- .image-aspect-ratio{
22
- margin-top: $CAP_SPACE_12;
23
- margin-left: 64px;
24
- }
25
- .image-dimension{
26
- margin-top: $CAP_SPACE_12;
27
- margin-right: 46px;
28
- }
29
- .image-info-wrapper{
30
- margin-bottom: 15px;
31
- }
32
- }
6
+ .upload-image {
7
+ margin-right: $CAP_SPACE_08;
8
+ }
9
+ .gallery-select {
10
+ margin-left: $CAP_SPACE_08;
11
+ }
12
+ .image-info-wrapper {
13
+ display: flex;
14
+ justify-content: space-between;
15
+ margin-top: 8px;
16
+ }
17
+ }
@@ -8,7 +8,7 @@ export default defineMessages({
8
8
  },
9
9
  uploadComputer: {
10
10
  id: `${scope}.uploadComputer`,
11
- defaultMessage: 'Your computer',
11
+ defaultMessage: 'Select from computer',
12
12
  },
13
13
  or: {
14
14
  id: `${scope}.or`,
@@ -24,19 +24,20 @@ export default defineMessages({
24
24
  },
25
25
  imageReUpload: {
26
26
  id: `${scope}.imageReUpload`,
27
- defaultMessage: 'Re upload',
27
+ defaultMessage: 'Reupload',
28
28
  },
29
29
  imageDimenstionDescription: {
30
30
  id: `${scope}.imageDimenstionDescription`,
31
- defaultMessage: 'Dimensions: {width}px x {height}px',
31
+ defaultMessage: 'Dimensions upto: {width}px x {height}px',
32
32
  },
33
33
  format: {
34
34
  id: `${scope}.format`,
35
- defaultMessage: 'Format: JPG, PNG',
35
+ defaultMessage: 'Format: JPEG, JPG, PNG',
36
36
  },
37
37
  imageIncorrectSize: {
38
38
  id: `${scope}.imageIncorrectSize`,
39
- defaultMessage: 'Please upload the image with correct type, size and dimension',
39
+ defaultMessage:
40
+ 'Please upload the image with correct type, size and dimension',
40
41
  },
41
42
  imageGallery: {
42
43
  id: `${scope}.imageGallery`,
@@ -46,4 +47,8 @@ export default defineMessages({
46
47
  id: `${scope}.aspectRatio`,
47
48
  defaultMessage: 'Aspect ratio: 1:1',
48
49
  },
50
+ imageSize: {
51
+ id: `${scope}.imageSize`,
52
+ defaultMessage: 'Size upto: 2MB',
53
+ },
49
54
  });
@@ -77,6 +77,10 @@
77
77
  font-size: 10px;
78
78
  width: 100%;
79
79
  font-family: 'open-sans';
80
+ .rcs-image{
81
+ width: 100%;
82
+ height: 123px;
83
+ }
80
84
  .message-pop-item{
81
85
  padding: 4px;
82
86
  background: #3F51B5;
@@ -87,6 +91,12 @@
87
91
  &:first-child{
88
92
  margin-top: 0;
89
93
  }
94
+ &.rcs-content {
95
+ background: $CAP_WHITE;
96
+ color: $CAP_G01;
97
+ margin-top: 0;
98
+ padding: 4px 8px;
99
+ }
90
100
  }
91
101
  }
92
102
  &:not(.sms){
@@ -0,0 +1,18 @@
1
+ <svg width="228" height="472" viewBox="0 0 228 472" xmlns="http://www.w3.org/2000/svg">
2
+ <g fill="none" fill-rule="evenodd">
3
+ <rect fill="#101211" width="228" height="472" rx="32"/>
4
+ <path d="M195 11c12.703 0 23 10.297 23 23v405c0 12.703-10.297 23-23 23H33c-12.703 0-23-10.297-23-23V34c0-12.703 10.297-23 23-23h25v3c0 7.077 5.655 12.833 12.693 12.996L71 27h86c7.18 0 13-5.82 13-13v-3h25z" fill="#F4F5F7"/>
5
+ <path d="M195 11c12.703 0 23 10.297 23 23v43.092H10V34c0-12.703 10.297-23 23-23h25v3c0 7.077 5.655 12.833 12.693 12.996L71 27h86c7.18 0 13-5.82 13-13v-3h25z" fill="#F8F8F8"/>
6
+ <rect stroke="#C8C7CC" stroke-width=".5" fill="#FAFAFA" x="44" y="421.072" width="168" height="20" rx="10"/>
7
+ <path d="M79.35 455h69.3c.72 0 1.35.467 1.35 1 0 .533-.63 1-1.35 1h-69.3c-.72 0-1.35-.467-1.35-1 0-.533.63-1 1.35-1z" fill="#2E2E2E" fill-rule="nonzero" opacity=".4"/>
8
+ <path fill="#E0E0E0" d="M10 77h208v1H10z"/>
9
+ <path d="m19.769 59.041-4.623-4.568a.487.487 0 0 1 0-.696l4.623-4.568a.728.728 0 0 1 1.02 0 .708.708 0 0 1 0 1.008l-3.954 3.908 3.954 3.908a.708.708 0 0 1 0 1.008.728.728 0 0 1-1.02 0M201 48a6 6 0 1 1 0 12 6 6 0 0 1 0-12zm0 .818a5.182 5.182 0 1 0 0 10.364 5.182 5.182 0 0 0 0-10.364zm.502 3.644v4.014h.502v.251h-2.008v-.25h.502v-3.764h-.502v-.251h1.506zm-.627-2.007a.627.627 0 1 1 0 1.254.627.627 0 0 1 0-1.254z" fill="#007AFF"/>
10
+ <path d="M198.7 21.3c-.5 0-.6 0-.8.1l-.3.3c-.1.2-.1.3-.1.8v2c0 .5 0 .6.1.8l.3.3c.2.1.3.1.8.1h6.8c.5 0 .6 0 .8-.1l.3-.3c.1-.2.1-.3.1-.8v-2c0-.5 0-.6-.1-.8l-.3-.3c-.2-.1-.3-.1-.8-.1h-6.8zm0-.4h6.8c.6 0 .8.1 1 .2.2.1.4.3.5.5.1.2.2.4.2 1v2c0 .6-.1.8-.2 1-.1.2-.3.4-.5.5-.2.1-.4.2-1 .2h-6.8c-.6 0-.8-.1-1-.2-.2-.1-.4-.3-.5-.5-.1-.2-.2-.4-.2-1v-2c0-.6.1-.8.2-1 .1-.2.3-.4.5-.5.2-.2.4-.2 1-.2zm8.9 1.7c.5.2.7.5.7.9s-.2.7-.7.9v-1.8z" fill-opacity=".36" fill="#000" fill-rule="nonzero"/>
11
+ <path d="M198.6 21.7h7c.2 0 .3 0 .4.1.1 0 .1.1.2.2s.1.2.1.4v2.3c0 .2 0 .3-.1.4l-.2.2c-.1.1-.2.1-.4.1h-7c-.2 0-.3 0-.4-.1-.1-.1-.2-.2-.2-.3 0-.1-.1-.2-.1-.4v-2.3c0-.2 0-.3.1-.4 0-.1.1-.1.2-.2.1.1.1 0 .4 0zM173.3 24.4c.5 0 .8.4.8.8v.6c0 .5-.4.8-.8.8s-.8-.4-.8-.8v-.6c0-.5.4-.8.8-.8zm2.7-1.2c.5 0 .8.4.8.8v1.7c0 .5-.4.8-.8.8s-.8-.4-.8-.8V24c0-.4.4-.8.8-.8zm2.6-1.3c.5 0 .8.4.8.8v3c0 .5-.4.8-.8.8s-.8-.4-.8-.8v-3c0-.4.3-.8.8-.8zm2.6-1.3c.5 0 .8.4.8.8v4.3c0 .5-.4.8-.8.8s-.8-.4-.8-.8v-4.3c0-.4.4-.8.8-.8zM189.8 21.6c1.2 0 2.4.5 3.3 1.3.1.1.2.1.2 0l.6-.6.1-.1s0-.1-.1-.1c-2.3-2.2-5.9-2.2-8.3 0l-.1.1s0 .1.1.1l.6.6c.1.1.2.1.2 0 1-.8 2.2-1.3 3.4-1.3zm0 2.1c.7 0 1.3.2 1.8.7.1.1.2.1.2 0l.6-.6.1-.1s0-.1-.1-.1c-1.5-1.4-3.8-1.4-5.3 0l-.1.1s0 .1.1.1l.6.6c.1.1.2.1.2 0 .6-.4 1.2-.7 1.9-.7zm1.2 1.5.1-.1s0-.1-.1-.1c-.7-.6-1.7-.6-2.4 0l-.1.1s0 .1.1.1l1.1 1.1.1.1s.1 0 .1-.1l1.1-1.1zM29.063 24.648c.02.388.17.657.449.805a.995.995 0 0 0 .484.117c.336 0 .622-.14.86-.42.236-.28.404-.848.503-1.705-.156.248-.35.422-.58.522-.23.1-.478.15-.744.15-.539 0-.965-.168-1.28-.504-.313-.336-.47-.768-.47-1.297 0-.507.155-.954.465-1.34.31-.385.767-.578 1.371-.578.815 0 1.378.368 1.688 1.102.171.404.257.909.257 1.516 0 .685-.102 1.291-.308 1.82-.341.88-.92 1.32-1.735 1.32-.546 0-.962-.143-1.246-.43-.284-.286-.425-.645-.425-1.078h.71zm1.066-1.148c.279 0 .533-.092.764-.275.23-.184.345-.505.345-.963 0-.412-.103-.718-.31-.92a1.086 1.086 0 0 0-.791-.303c-.344 0-.617.115-.819.346-.201.23-.302.538-.302.924 0 .364.088.654.265.869.177.215.46.322.848.322zm3.207-1.629h.816v.852h-.816v-.852zm0 3.277h.816V26h-.816v-.852zm3.98-1.128v-2.536l-1.793 2.536h1.793zm.012 1.98v-1.367h-2.453v-.688l2.563-3.554h.593v3.629h.824v.613h-.824V26h-.703zm2.559-3.96v-.54c.508-.05.862-.132 1.062-.248.2-.116.35-.39.45-.822h.554V26h-.75v-3.96h-1.316z" fill="#000" fill-rule="nonzero"/>
12
+ <path d="M27.304 424h4.393c.3 0 .696.196.881.438l1.207 1.78a.635.635 0 0 0 .524.278h2.596A1.1 1.1 0 0 1 38 427.603v8.04a1.1 1.1 0 0 1-1.095 1.108H22.096A1.1 1.1 0 0 1 21 435.644v-8.041a1.1 1.1 0 0 1 1.096-1.107h2.606c.203 0 .392-.101.507-.269l1.213-1.79c.186-.24.582-.437.882-.437zm6.31 3.881c0 .306.245.555.548.555a.55.55 0 0 0 .548-.555.551.551 0 0 0-.548-.554.552.552 0 0 0-.549.554zm-7.953 3.603c0 2.144 1.719 3.88 3.84 3.88 2.12 0 3.838-1.736 3.838-3.88 0-2.143-1.718-3.88-3.839-3.88-2.12 0-3.839 1.737-3.839 3.88zm-3.016-6.93h1.097a.55.55 0 0 1 .548.555v.554h-2.193v-.554a.55.55 0 0 1 .548-.554zm3.84 6.93c0-1.684 1.35-3.048 3.015-3.048 1.666 0 3.016 1.364 3.016 3.048 0 1.685-1.35 3.05-3.016 3.05s-3.016-1.365-3.016-3.05zM202 423a8 8 0 1 1 0 16 8 8 0 0 1 0-16zm3.06 6.251a.437.437 0 0 0-.437.437v1.603a2.623 2.623 0 0 1-5.246 0v-1.603a.437.437 0 1 0-.875 0v1.603a3.498 3.498 0 0 0 3.06 3.47v.903h-1.165a.437.437 0 1 0 0 .874h3.206a.437.437 0 0 0 0-.874h-1.166v-.904a3.498 3.498 0 0 0 3.061-3.469v-1.603a.437.437 0 0 0-.437-.437zm-3.06-3.79-.143.006a1.75 1.75 0 0 0-1.606 1.744v4.08c0 .966.783 1.75 1.749 1.75l.143-.006a1.75 1.75 0 0 0 1.606-1.744v-4.08c0-.966-.783-1.75-1.749-1.75z" fill="#8A8A8F"/>
13
+ <text font-family="Roboto-Regular, Roboto" font-size="7" letter-spacing="-.169" fill="#0A0A0A">
14
+ <tspan x="100" y="70">Sender ID</tspan>
15
+ </text>
16
+ <path d="M115 40c6.075 0 11 4.925 11 11s-4.925 11-11 11-11-4.925-11-11 4.925-11 11-11zm0 .88c-5.59 0-10.12 4.53-10.12 10.12 0 2.935 1.25 5.579 3.246 7.427 1.669-1.206 4.206-1.396 4.726-2.795.065-.709.04-1.204.04-1.852-.322-.169-.92-1.244-1.017-2.15-.252-.021-.65-.268-.767-1.24-.063-.523.187-.817.339-.91-.854-3.286-.384-6.156 3.512-6.228.973 0 1.723.26 2.015.774 2.844.395 1.99 4.219 1.579 5.455.152.092.402.386.34.908-.117.973-.516 1.22-.768 1.24-.097.908-.673 1.982-.994 2.15 0 .649-.025 1.144.04 1.853.519 1.398 3.044 1.589 4.706 2.79A10.085 10.085 0 0 0 125.12 51c0-5.59-4.53-10.12-10.12-10.12z" fill="#959BA9" fill-rule="nonzero"/>
17
+ </g>
18
+ </svg>
@@ -17,6 +17,7 @@ import messages from './messages';
17
17
  import {
18
18
  WECHAT,
19
19
  WHATSAPP,
20
+ RCS,
20
21
  } from '../../v2Containers/CreativesContainer/constants';
21
22
  import Carousel from '../Carousel';
22
23
  import { VIBER, FACEBOOK } from '../../v2Containers/App/constants';
@@ -24,6 +25,7 @@ import { UNSUBSCRIBE_TEXT_LENGTH } from '../../v2Containers/Whatsapp/constants';
24
25
  import whatsappMobileAndroid from './assets/images/whatsapp_mobile_android.svg'
25
26
  const wechatBodyNew = require('./assets/images/wechat_mobile_android.svg');
26
27
  const smsMobileAndroid = require('./assets/images/sms_mobile_android.svg');
28
+ const smsMobileIos = require('./assets/images/sms_mobile_ios.svg');
27
29
  const lineMobileAndroid = require('../../assets/line.png');
28
30
  const viberMobileAndroid = require('./assets/images/viberMobile.svg');
29
31
 
@@ -158,9 +160,11 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
158
160
  whatsappContentLen,
159
161
  intl,
160
162
  templateData,
163
+ rcsIosPreview,
161
164
  } = this.props;
162
165
  const { formatMessage } = intl;
163
- const { buttonText, imageURL, messageContent: viberMessageContent } = content || {};
166
+ const { buttonText, imageURL, rcsPreviewContent, messageContent: viberMessageContent } = content || {};
167
+ const { rcsImageSrc, rcsTitle, rcsDesc } = rcsPreviewContent || {};
164
168
  let smsDetails = {};
165
169
  // let smsText = '';
166
170
  if (this.props.content && this.props.charCounterEnabled) {
@@ -722,6 +726,42 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
722
726
  ''
723
727
  )
724
728
  }
729
+ {
730
+ channel?.toUpperCase() === RCS && (
731
+ <div className='shell-v2 align-center'>
732
+ <CapImage
733
+ className='preview-image'
734
+ src={rcsIosPreview ? smsMobileIos : smsMobileAndroid}
735
+ alt={formatMessage(messages.previewGenerated)}
736
+ />
737
+ <div className='msg-container sms'>
738
+ <div className='message-pop sms'>
739
+ {rcsImageSrc && (
740
+ <CapImage
741
+ src={rcsImageSrc}
742
+ className='rcs-image'
743
+ alt={formatMessage(messages.previewGenerated)}
744
+ />
745
+ )}
746
+ {rcsTitle && (
747
+ <CapLabel
748
+ type="label5"
749
+ className='message-pop-item align-left rcs-content'
750
+ fontWeight='bold'
751
+ >
752
+ {rcsTitle}
753
+ </CapLabel>
754
+ )}
755
+ {rcsDesc && (
756
+ <CapLabel type="label5" className='message-pop-item align-left rcs-content rcs-desc'>
757
+ {rcsDesc}
758
+ </CapLabel>
759
+ )}
760
+ </div>
761
+ </div>
762
+ </div>
763
+ )
764
+ }
725
765
  {channel && channel.toLowerCase() === FACEBOOK && (
726
766
  <div style={{position: 'absolute', left: '80%'}} id="facebook-preview">
727
767
  <CapFacebookPreview
@@ -1,5 +1,37 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
+ exports[`Test Templates container Should render correct preview component for rcs channel 1`] = `
4
+ <CapRow>
5
+ <CapColumn
6
+ span={16}
7
+ />
8
+ <CapColumn
9
+ span={8}
10
+ >
11
+ <div
12
+ className="preview-container "
13
+ >
14
+ <div
15
+ className="shell-v2 align-center"
16
+ >
17
+ <CapImage
18
+ alt="Preview is being generated"
19
+ className="preview-image"
20
+ src="test-file-stub"
21
+ />
22
+ <div
23
+ className="msg-container sms"
24
+ >
25
+ <div
26
+ className="message-pop sms"
27
+ />
28
+ </div>
29
+ </div>
30
+ </div>
31
+ </CapColumn>
32
+ </CapRow>
33
+ `;
34
+
3
35
  exports[`Test Templates container Should render correct preview component for whatsapp channel 1`] = `
4
36
  <CapRow>
5
37
  <CapColumn
@@ -57,7 +89,7 @@ exports[`Test Templates container Should render correct preview component for wh
57
89
  Object {
58
90
  "background-color": "#efefef",
59
91
  "border-radius": "6px",
60
- "left": "10%",
92
+ "left": 0,
61
93
  "padding": "4px 0 0.571rem",
62
94
  "width": "88%",
63
95
  }
@@ -2,23 +2,23 @@ import React from 'react';
2
2
  import { shallowWithIntl } from '../../../helpers/intl-enzym-test-helpers';
3
3
 
4
4
  import { TemplatePreview } from '../index';
5
- import mockdata from '../../mockdata';
6
5
 
7
6
 
8
7
  describe('Test Templates container', () => {
9
8
  let renderedComponent;
10
9
 
11
- const renderFunction = () => {
10
+ const renderFunction = (channel) => {
12
11
  renderedComponent = shallowWithIntl(
13
- <TemplatePreview
14
- channel="whatsapp"
15
- showCount
16
- />
12
+ <TemplatePreview channel={channel} showCount />,
17
13
  );
18
14
  };
19
15
 
20
16
  it('Should render correct preview component for whatsapp channel', () => {
21
- renderFunction();
17
+ renderFunction('whatsapp');
18
+ expect(renderedComponent).toMatchSnapshot();
19
+ });
20
+ it('Should render correct preview component for rcs channel', () => {
21
+ renderFunction('rcs');
22
22
  expect(renderedComponent).toMatchSnapshot();
23
23
  });
24
24
  });
@@ -48,6 +48,7 @@ export const PREVIEW = 'preview';
48
48
  export const VIBER = 'viber';
49
49
  export const FACEBOOK = 'facebook';
50
50
  export const WHATSAPP = 'whatsapp';
51
+ export const RCS = 'rcs';
51
52
 
52
53
  export const TRACK_EDIT_SMS = 'editSms';
53
54
  export const TRACK_EDIT_EMAIL = 'editEmail';
@@ -110,4 +111,4 @@ export const LOYALTY = 'loyalty';
110
111
 
111
112
  export const FAILURE = 'FAILURE';
112
113
  export const DATE_DISPLAY_FORMAT = 'D MMM YYYY';
113
- export const TIME_DISPLAY_FORMAT = 'hh:mm A';
114
+ export const TIME_DISPLAY_FORMAT = 'hh:mm A';
@@ -0,0 +1,30 @@
1
+ <svg width="152" height="152" viewBox="0 0 152 152" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2
+ <defs>
3
+ <path id="g6dreh3yza" d="M0 0h135.016v120.429H0z"/>
4
+ <path id="gsany574hc" d="M.661.295h41.938V38H.66z"/>
5
+ </defs>
6
+ <g fill="none" fill-rule="evenodd">
7
+ <g transform="translate(8 13)">
8
+ <mask id="672iuzud9b" fill="#fff">
9
+ <use xlink:href="#g6dreh3yza"/>
10
+ </mask>
11
+ <path d="M58.686 9.812c.251-1.179-.726-2.026-2.046-2.226-.93-.142-1.905.151-2.532.853-.487.546-.837 1.36-.28 2.433 1.11 2.145 4.522.517 4.858-1.06m-11.988 9.282c2.831-2.295 4.63-6.886.88-9.411-3.749-2.525-7.233-.134-7.957.612 0 0-4.629 4.132-3.099 8.799 1.53 4.668 7.345 2.296 10.176 0m56.226 99.867c-15.384-2.74-32.728-1.431-50.612 1.073-17.883 2.503-42.92-6.617-50.79-35.231-7.869-28.615 16.811-46.498 27.184-51.148 4.99-2.237 9.606-4.68 13.055-6.614 3.54-1.985 6.827-4.372 9.867-7.058 28.76-25.409 51.17-22.275 64.708-14.048 14.13 8.585 11.446 29.866 10.373 49.538-1.073 19.672 6.796 27.363 8.227 44.531 1.43 17.169-16.514 21.717-32.012 18.957" fill="#FEC52E" mask="url(#672iuzud9b)"/>
12
+ </g>
13
+ <path d="M59.978 122.446c1.308-4.136 1.96-22.422 1.415-28.719-.655-7.548-1.488-9.112-1.488-9.112h39.168l-1.824 12.781c-.41 4.85-.408 14.685.075 19.522.445 4.46.076 3.3 1.092 7.802l.938 3.02c.694 1.95-.182 6.037-2.251 6.048l-34.775-1.104s-5.592.01-2.35-10.238" fill="#FFF"/>
14
+ <path d="M112.226 84.964c0 3.708-15.394 2.149-33.297 3.009-7.082.339-13.741-.627-19.25-.511-8.053.17-13.964-.63-13.964-2.848 0-3.708 15.29-10.071 33.214-10.071s33.297 6.712 33.297 10.42" fill="#FFF"/>
15
+ <path d="M100.178 82.995c0 2.163-9.869 1.555-21.275 1.555-11.406 0-21.472-.084-21.472-2.247s10.066-5.587 21.472-5.587 21.275 4.116 21.275 6.28M98.095 91.103c.187-.572.542-3.525.542-3.525s-9.2.468-19.354.48c-6.581.007-13.558-.333-18.704-.588 0 0 .464 3.418.533 3.609 0 0 7.018 2.51 20.309 2.29 0 0 10.376-.39 16.674-2.266" fill="#242E3D"/>
16
+ <path d="m121.019 35.042-20.571-8.053a4.146 4.146 0 0 0-5.373 2.35L89.79 42.837a4.147 4.147 0 0 0 2.35 5.373l10.286 4.026-1.712 4.374 6.085-2.661 5.913 2.314a4.146 4.146 0 0 0 5.373-2.35l5.285-13.498a4.148 4.148 0 0 0-2.351-5.373" fill="#E51FA3"/>
17
+ <path fill="#F0DF32" d="m117.453 42.482-18.5-7.243.612-1.568 18.502 7.243zM116.103 45.932l-18.501-7.243.613-1.568 18.502 7.243zM107.9 47.331l-11.863-4.644.614-1.568 11.863 4.644z"/>
18
+ <path d="m31.78 58.548.743.427-.427.745-.745-.427.428-.745zm1.58-2.75.743.426-.79 1.376-.744-.427.79-1.376zm1.578-2.752.745.427-.79 1.375-.744-.427.79-1.375zm1.58-2.752.745.427-.79 1.376-.744-.428.79-1.375zm1.58-2.752.744.427-.789 1.376-.745-.427.79-1.376zm1.218-2.12.744.427-.427.744-.745-.427.428-.744zm-28.148-2.188-2.14 3.728 29.263 16.802 2.145-3.737c-.048-.025-.1-.039-.148-.066a4.026 4.026 0 1 1 4.009-6.982c.048.027.086.065.132.094l2.431-4.234-29.264-16.802-2.426 4.226a4.022 4.022 0 0 1 1.436 5.458 4.022 4.022 0 0 1-5.438 1.513z" fill="#F87D22"/>
19
+ <path fill="#FFF" d="m20.306 48.55-.168-.535 10.203-3.21.169.535zM26.818 49.051a1.32 1.32 0 0 0-1.312 1.437 1.312 1.312 0 0 0 1.43 1.192 1.32 1.32 0 0 0 1.194-1.43 1.32 1.32 0 0 0-1.312-1.199m-.001 3.195c-.96 0-1.781-.735-1.87-1.708a1.881 1.881 0 0 1 1.7-2.04 1.89 1.89 0 0 1 2.04 1.701 1.881 1.881 0 0 1-1.87 2.047M24.77 41.475c-.04 0-.081 0-.121.005a1.306 1.306 0 0 0-.893.469c-.225.27-.332.61-.3.962.032.35.198.668.468.893.27.225.606.332.963.3a1.314 1.314 0 0 0 .724-2.323 1.302 1.302 0 0 0-.841-.306m-.006 3.195a1.873 1.873 0 0 1-1.867-1.709 1.87 1.87 0 0 1 .428-1.372 1.881 1.881 0 0 1 3.313 1.034c.045.499-.107.987-.428 1.372a1.869 1.869 0 0 1-1.446.675"/>
20
+ <g transform="translate(87 101)">
21
+ <mask id="i30xlevwtd" fill="#fff">
22
+ <use xlink:href="#gsany574hc"/>
23
+ </mask>
24
+ <path d="m32.711 1.546 9.648 19.31a2.24 2.24 0 0 1 .091 1.81 2.242 2.242 0 0 1-1.1 1.219L13.578 37.76a2.246 2.246 0 0 1-1.637.15 2.252 2.252 0 0 1-1.393-1.16L.9 17.44a2.252 2.252 0 0 1-.092-1.808 2.255 2.255 0 0 1 1.103-1.224L29.682.533a2.252 2.252 0 0 1 1.64-.147l.053.016a2.249 2.249 0 0 1 1.336 1.144" fill="#279AE0" mask="url(#i30xlevwtd)"/>
25
+ </g>
26
+ <path d="M129.45 123.667a2.24 2.24 0 0 1-1.1 1.218l-27.771 13.876a2.256 2.256 0 0 1-1.637.15l8.995-20.149 21.514 4.905z" fill="#0071BB"/>
27
+ <path d="m118.322 101.386-8.931 20.286-21.584-5.04a2.26 2.26 0 0 1 1.104-1.223l27.77-13.876c.53-.264 1.115-.3 1.64-.147" fill="#00ADEF"/>
28
+ <path d="M77.442 79.348c-.146 3.123-.336 5.54-.402 6.245a57.462 57.462 0 0 1-2.955-.235 92.969 92.969 0 0 0-.75-5.662c-.65-4.085-1.768-9.457-3.57-13.654-3.357-7.833 1.119-10.071 1.119-10.071s3.357-1.12 5.596 4.476c1.409 3.514 1.264 12.623.962 18.9M85.708 79.272a201.88 201.88 0 0 1-1.992 6.165c-.974.046-1.992.067-3.022.067h-.078c.112-.66.492-3.178.761-6.422.347-3.928.515-8.931-.146-13.094-1.32-8.215 3.548-9.188 3.548-9.188s3.503-.212 4.286 5.617c.46 3.415-1.589 11.102-3.357 16.855M123.082 70.491a.259.259 0 0 0-.244-.258 1.77 1.77 0 0 1-1.766-1.747c.002-.012.001-.02.001-.032 0-.143-.11-.26-.254-.26a.252.252 0 0 0-.254.255v.028a1.763 1.763 0 0 1-1.765 1.746.261.261 0 0 0-.224.257c0 .132.098.25.225.266l.002.001c.974 0 1.766.787 1.773 1.762a.259.259 0 0 0 .258.251c.143 0 .243-.114.243-.257v-.082a1.765 1.765 0 0 1 1.757-1.664h.001a.264.264 0 0 0 .247-.266M69.766 43.268a.2.2 0 0 0-.187-.198 1.356 1.356 0 0 1-1.354-1.34c.002-.007 0-.014 0-.023a.194.194 0 1 0-.389-.003v.02a1.352 1.352 0 0 1-1.352 1.338.203.203 0 0 0 0 .4l.002.002a1.36 1.36 0 0 1 1.359 1.35c.004.107.09.192.197.192.11 0 .187-.087.187-.196v-.063a1.353 1.353 0 0 1 1.347-1.275v-.001a.203.203 0 0 0 .19-.203M39.243 95.815a.208.208 0 0 0-.196-.207 1.418 1.418 0 0 1-1.414-1.4c.002-.009 0-.016 0-.026a.205.205 0 0 0-.203-.209.203.203 0 0 0-.203.205c0 .007-.002.016 0 .023a1.414 1.414 0 0 1-1.416 1.4.21.21 0 0 0-.178.205c0 .106.077.2.18.213v.001c.782 0 1.416.631 1.422 1.412.005.112.093.2.207.2.114 0 .194-.09.194-.205 0-.022.002-.045 0-.065a1.414 1.414 0 0 1 1.408-1.334h.002a.212.212 0 0 0 .197-.213" fill="#FFF"/>
29
+ </g>
30
+ </svg>
@@ -88,7 +88,26 @@ export default defineMessages({
88
88
  id: `creatives.containersV2.templateNamePlaceholder`,
89
89
  defaultMessage: 'Enter template name',
90
90
  },
91
-
91
+ "emptyTemplateNameErrorMessage": {
92
+ id: `creatives.containersV2.emptyTemplateNameErrorMessage`,
93
+ defaultMessage: 'Template name cannot be empty',
94
+ },
95
+ "creativeNameLabel": {
96
+ id: `creatives.containersV2.creativeNameLabel`,
97
+ defaultMessage: 'Creative name',
98
+ },
99
+ "addLabels": {
100
+ id: `creatives.containersV2.addLabels`,
101
+ defaultMessage: 'Add labels',
102
+ },
103
+ "preview": {
104
+ id: `creatives.containersV2.preview`,
105
+ defaultMessage: 'Preview',
106
+ },
107
+ "delete": {
108
+ id: `creatives.containersV2.delete`,
109
+ defaultMessage: 'Delete',
110
+ },
92
111
  //refresh due to org change messages
93
112
 
94
113
  "refreshOrgText": {