@capillarytech/creatives-library 7.12.15 → 7.12.16

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 +24 -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 +58 -11
  18. package/v2Containers/CreativesContainer/SlideBoxHeader.js +41 -32
  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 +147 -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 +1075 -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 +4 -2
  54. package/v2Containers/Whatsapp/messages.js +0 -13
  55. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +13 -13
  56. package/v2Containers/Whatsapp/tests/__snapshots__/utils.test.js.snap +32 -26
  57. package/v2Containers/mockdata.js +1 -1
@@ -1,5 +1,103 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
+ exports[`Test SlideBoxHeader container Should render correct component for rcs channel create mode 1`] = `
4
+ <div
5
+ key="creatives-container-slidebox-header-content"
6
+ />
7
+ `;
8
+
9
+ exports[`Test SlideBoxHeader container Should render correct component for rcs channel edit mode 1`] = `
10
+ <div
11
+ key="creatives-container-slidebox-header-content"
12
+ >
13
+ <CapHeader
14
+ description={false}
15
+ descriptionClass=""
16
+ inline={false}
17
+ prefix={false}
18
+ size="large"
19
+ title={
20
+ <FormattedMessage
21
+ defaultMessage="Edit {channel}"
22
+ id="creatives.containersV2.Creatives.editMessageContent"
23
+ values={
24
+ Object {
25
+ "channel": <FormattedMessage
26
+ defaultMessage="RCS creative"
27
+ id="creatives.containersV2.Creatives.rcsCreative"
28
+ values={Object {}}
29
+ />,
30
+ }
31
+ }
32
+ />
33
+ }
34
+ titleClass=""
35
+ />
36
+ </div>
37
+ `;
38
+
39
+ exports[`Test SlideBoxHeader container Should render correct component for rcs channel preview mode 1`] = `
40
+ <div
41
+ key="creatives-container-slidebox-header-content"
42
+ >
43
+ <CapHeader
44
+ description={
45
+ <CapLabel
46
+ type="label3"
47
+ >
48
+ <FormattedMessage
49
+ defaultMessage="Last updated: {date} by {user}"
50
+ id="creatives.containersV2.Creatives.lastUpdated"
51
+ values={
52
+ Object {
53
+ "date": "17 Feb 2022",
54
+ "user": "Ashish Karan fd",
55
+ }
56
+ }
57
+ />
58
+ </CapLabel>
59
+ }
60
+ descriptionClass=""
61
+ inline={false}
62
+ prefix={
63
+ <SlideBoxHeader__PrefixWrapper>
64
+ <SvgBack />
65
+ </SlideBoxHeader__PrefixWrapper>
66
+ }
67
+ size="large"
68
+ title="amit123456"
69
+ titleClass=""
70
+ />
71
+ </div>
72
+ `;
73
+
74
+ exports[`Test SlideBoxHeader container Should render correct component for rcs channel templates mode 1`] = `
75
+ <div
76
+ key="creatives-container-slidebox-header-content"
77
+ >
78
+ <CapHeader
79
+ description={
80
+ <FormattedMessage
81
+ defaultMessage="Select only one creative"
82
+ id="creatives.containersV2.Creatives.creativeTemplatesDesc"
83
+ values={Object {}}
84
+ />
85
+ }
86
+ descriptionClass=""
87
+ inline={false}
88
+ size="large"
89
+ title={
90
+ <FormattedMessage
91
+ defaultMessage="Creative templates"
92
+ id="creatives.containersV2.Creatives.creativeTemplates"
93
+ values={Object {}}
94
+ />
95
+ }
96
+ titleClass=""
97
+ />
98
+ </div>
99
+ `;
100
+
3
101
  exports[`Test SlideBoxHeader container Should render correct component for whatsapp channel create mode 1`] = `
4
102
  <div
5
103
  key="creatives-container-slidebox-header-content"
@@ -1,5 +1,76 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
+ exports[`Test SlideBoxContent container Should render correct component for rcs channel create mode 1`] = `
4
+ <CreativesContainer__SlideBoxWrapper
5
+ className="add-creatives-section creatives-library-mode "
6
+ >
7
+ <CapSlideBox
8
+ closeIconSize="m"
9
+ content={
10
+ <SlideBoxContent
11
+ currentChannel="RCS"
12
+ getFormData={[Function]}
13
+ handleClose={[Function]}
14
+ onCallTaskSubmit={[Function]}
15
+ onChannelChange={[Function]}
16
+ onCreateComplete={[MockFunction]}
17
+ onCreateNew={[Function]}
18
+ onCreateNextStep={[Function]}
19
+ onEmailModeChange={[Function]}
20
+ onEnterTemplateName={[Function]}
21
+ onFTPSubmit={[MockFunction]}
22
+ onFacebookSubmit={[MockFunction]}
23
+ onMobilepushModeChange={[Function]}
24
+ onPreviewTemplate={[Function]}
25
+ onRemoveTemplateName={[Function]}
26
+ onResetStep={[Function]}
27
+ onSelectTemplate={[Function]}
28
+ onShowTemplates={[Function]}
29
+ onValidationFail={[Function]}
30
+ onWeChatMaptemplateStepChange={[Function]}
31
+ onWechatTemplateChange={[Function]}
32
+ saveMessage={[Function]}
33
+ setIsLoadingContent={[Function]}
34
+ showTemplateName={[Function]}
35
+ slidBoxContent="templates"
36
+ templateData={
37
+ Object {
38
+ "type": undefined,
39
+ }
40
+ }
41
+ templateStep="modeSelection"
42
+ weChatMaptemplateStep={0}
43
+ weChatTemplateType=""
44
+ />
45
+ }
46
+ footer={false}
47
+ handleClose={[Function]}
48
+ header={
49
+ <SlideBoxHeader
50
+ channel="RCS"
51
+ isLoadingContent={true}
52
+ onShowTemplates={[Function]}
53
+ onWeChatMaptemplateStepChange={[Function]}
54
+ showPrefix={true}
55
+ slidBoxContent="templates"
56
+ templateData={
57
+ Object {
58
+ "type": undefined,
59
+ }
60
+ }
61
+ templateNameRenderProp={[Function]}
62
+ templateStep="modeSelection"
63
+ weChatMaptemplateStep={0}
64
+ weChatTemplateType=""
65
+ />
66
+ }
67
+ position="right"
68
+ show={true}
69
+ size="size-xl"
70
+ />
71
+ </CreativesContainer__SlideBoxWrapper>
72
+ `;
73
+
3
74
  exports[`Test SlideBoxContent container Should render correct component for whatsapp channel create mode 1`] = `
4
75
  <CreativesContainer__SlideBoxWrapper
5
76
  className="add-creatives-section creatives-library-mode "
@@ -4,7 +4,7 @@ import { shallowWithIntl } from '../../../helpers/intl-enzym-test-helpers';
4
4
  import { Creatives } from '../index';
5
5
  import mockdata from '../../mockdata';
6
6
 
7
- const { Templates, editTemplateData } = mockdata;
7
+ const { whatsappTemplates, rcsTemplates, whatsappEditTemplateData, rcsEditTemplateData } = mockdata;
8
8
 
9
9
  jest.mock("../../../v2Components/FormBuilder", () => ({
10
10
  __esModule: true,
@@ -20,10 +20,10 @@ describe('Test SlideBoxContent container', () => {
20
20
  jest.clearAllMocks();
21
21
  });
22
22
 
23
- const renderFunction = (channel, mode, templateData) => {
23
+ const renderFunction = (channel, mode, templates, templateData) => {
24
24
  renderedComponent = shallowWithIntl(
25
25
  <Creatives
26
- Templates={Templates}
26
+ Templates={templates}
27
27
  channel={channel}
28
28
  slidBoxContent={mode}
29
29
  templateData={templateData}
@@ -34,12 +34,12 @@ describe('Test SlideBoxContent container', () => {
34
34
  };
35
35
 
36
36
  it('Should render correct component for whatsapp channel create mode', () => {
37
- renderFunction("WHATSAPP", "createTemplate", { mode: "create" });
37
+ renderFunction("WHATSAPP", "createTemplate", whatsappTemplates, { mode: "create" });
38
38
  expect(renderedComponent).toMatchSnapshot();
39
39
  });
40
40
 
41
41
  it('Should render correct component for whatsapp channel edit mode', () => {
42
- renderFunction("WHATSAPP", "editTemplate", editTemplateData);
42
+ renderFunction("WHATSAPP", "editTemplate", whatsappTemplates, whatsappEditTemplateData);
43
43
  renderedComponent.instance().onEditTemplate();
44
44
  renderedComponent.find('CapSlideBox').props().content.props.handleClose();
45
45
  expect(renderedComponent).toMatchSnapshot();
@@ -47,12 +47,24 @@ describe('Test SlideBoxContent container', () => {
47
47
  expect(handleCloseCreatives).toHaveBeenCalledWith(true);
48
48
  });
49
49
 
50
-
51
- it('Text getCreatives data', () => {
52
- renderFunction("WHATSAPP", "editTemplate", editTemplateData);
50
+ it('Text getCreatives data for whatsapp', () => {
51
+ renderFunction("WHATSAPP", "editTemplate", whatsappTemplates, whatsappEditTemplateData);
53
52
  renderedComponent.instance().onEditTemplate();
54
- renderedComponent.find('CapSlideBox').props().content.props.getFormData(editTemplateData);
53
+ renderedComponent.find('CapSlideBox').props().content.props.getFormData(whatsappEditTemplateData);
55
54
  expect(getCreativesData).toHaveBeenCalledTimes(1);
56
55
  expect(getCreativesData).toHaveBeenCalledWith({ channel: "WHATSAPP" });
57
56
  });
57
+
58
+ it('Should render correct component for rcs channel create mode', () => {
59
+ renderFunction("RCS", "createTemplate", rcsTemplates, { mode: "create" });
60
+ expect(renderedComponent).toMatchSnapshot();
61
+ });
62
+
63
+ it('Text getCreatives data for rcs', () => {
64
+ renderFunction("RCS", "editTemplate", rcsTemplates, rcsEditTemplateData);
65
+ renderedComponent.instance().onEditTemplate();
66
+ renderedComponent.find('CapSlideBox').props().content.props.getFormData(rcsEditTemplateData);
67
+ expect(getCreativesData).toHaveBeenCalledTimes(1);
68
+ expect(getCreativesData).toHaveBeenCalledWith({ channel: "RCS" });
69
+ });
58
70
  });
@@ -60,6 +60,7 @@ import {
60
60
  NO_CALL_TO_ACTION,
61
61
  } from './constant';
62
62
  import cloneDeep from 'lodash/cloneDeep';
63
+ import { FACEBOOK } from "../../CreativesContainer/constants";
63
64
  export const Advertisement = (props) => {
64
65
  const CarouselContainer = styled.div`
65
66
  width: ${(styledProps) => styledProps.width || '22px'};
@@ -366,7 +367,7 @@ export const Advertisement = (props) => {
366
367
  },
367
368
  },
368
369
  },
369
- type: "FACEBOOK",
370
+ type: FACEBOOK,
370
371
  name: messageTitle,
371
372
  };
372
373
  if (!isFullMode) {
@@ -441,7 +442,7 @@ export const Advertisement = (props) => {
441
442
  value: formatSubmitPayload(),
442
443
  _id: params && params.id,
443
444
  validity: true,
444
- type: 'FACEBOOK',
445
+ type: FACEBOOK,
445
446
  });
446
447
  }, [carouselData,
447
448
  pageId,
@@ -558,6 +559,7 @@ export const Advertisement = (props) => {
558
559
  className={`cap-image-upload-${selectedAd}`}
559
560
  key={`${index}-fb-image-upload`}
560
561
  imageData={fbADData}
562
+ channel={FACEBOOK}
561
563
  /> :
562
564
  <CapVideoUpload
563
565
  style={{paddingBottom: '21px'}}
@@ -60,7 +60,6 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
60
60
  this.getLinkTypeFields = getLinkTypeFields.bind(this);
61
61
  }
62
62
  componentWillMount() {
63
-
64
63
  this.props.actions.getWeCrmAccounts("mobilepush");
65
64
  if (!this.props.Templates.selectedWeChatAccount && this.props.location.query.type !== 'embedded') {
66
65
  const type = this.props.location.query.type;
@@ -76,7 +75,6 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
76
75
  version: "v2",
77
76
  };
78
77
  this.props.globalActions.fetchSchemaForEntity(query);
79
-
80
78
  }
81
79
  }
82
80
  componentDidMount() {
@@ -106,10 +104,9 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
106
104
  } else if (nextProps.isGetFormData && this.props.isGetFormData !== nextProps.isGetFormData && this.props.isFullMode && !this.props.Create.createTemplateInProgress) {
107
105
  this.startValidation();
108
106
  }
109
- const selectedWeChatAccount = (!_.isEmpty(this.props.Templates.selectedWeChatAccount) ? this.props.Templates.selectedWeChatAccount :
107
+ const selectedWeChatAccount = (!_.isEmpty(this.props.Templates.selectedWeChatAccount) ? this.props.Templates.selectedWeChatAccount :
110
108
  (!_.isEmpty(this.props.Edit.selectedWeChatAccount) ? this.props.Edit.selectedWeChatAccount : nextProps.Edit.selectedWeChatAccount));
111
109
  if (this.props.location.query.type === 'embedded' && !nextProps.Edit.fetchingWeCrmAccounts && !_.isEqual(this.props.Edit.weCrmAccounts, nextProps.Edit.weCrmAccounts) && (!selectedWeChatAccount || _.isEmpty(selectedWeChatAccount))) {
112
-
113
110
  this.setMobilePushAccountOptions(nextProps.Edit.weCrmAccounts, get(this.props, "templateData.definition.accountId"));
114
111
  }
115
112
  if (!_.isEmpty(nextProps.Edit.selectedWeChatAccount) && !_.isEqual(this.props.Edit.selectedWeChatAccount, nextProps.Edit.selectedWeChatAccount) && (this.props.location.query.type === 'embedded') && this.props.location.query.module === "loyalty") {
@@ -175,7 +172,6 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
175
172
  });
176
173
  };
177
174
  onFormDataChange = (formData, tabCount, currentTab, inputField) => {
178
-
179
175
  const newFormData = _.cloneDeep(formData);
180
176
  const {templateCta} = this.state;
181
177
  if (!_.isEmpty(templateCta) && this.state.currentTab === 2) {
@@ -241,12 +237,10 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
241
237
  };
242
238
 
243
239
  onTabChange = (data) => {
244
-
245
240
  this.setState({currentTab: data});
246
241
  };
247
242
 
248
243
  onTagSelect = (data, currentTab, srcComp) => {
249
-
250
244
  const editorId = srcComp.target;
251
245
  this.insertAtCursor(document.getElementById(editorId), `{{${data}}}`, currentTab);
252
246
  document.getElementById(editorId).focus();
@@ -259,10 +253,10 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
259
253
  onUpdateTemplateComplete = (response) => {
260
254
  const obj = this.getTransformedData(this.state.formData);
261
255
  const content = getContent(obj);
262
- const {
256
+ const {
263
257
  definition: {
264
- mode: definitionMode
265
- }
258
+ mode: definitionMode,
259
+ },
266
260
  } = obj || {};
267
261
  const label = this.props.location.pathname.indexOf('image') >= 0 ? 'image' : 'text';
268
262
  const timeTaken = GA.timeTracker.stopTimer(TRACK_EDIT_MPUSH, {
@@ -278,12 +272,12 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
278
272
  timeTaken,
279
273
  content,
280
274
  mode: EDIT,
281
- imageAdded: definitionMode === 'image'
282
- })
283
- } catch(e) {
275
+ imageAdded: definitionMode === 'image',
276
+ });
277
+ } catch (e) {
284
278
  console.log(e);
285
279
  }
286
-
280
+
287
281
  this.resetSchema();
288
282
  this.setState({
289
283
  formData: {},
@@ -535,7 +529,8 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
535
529
  delete cta.ioscdeepLinkName;
536
530
  }
537
531
  obj.versions.base.IOS.expandableDetails.ctas.push(cta);
538
- obj.versions.base.IOS.expandableDetails.categoryId = get(this.state, "templateCta.id");
532
+ obj.versions.base.IOS.expandableDetails.categoryId = get(this.state, "templateCta.id") || get(this.state.editData, 'versions.base.IOS.expandableDetails.categoryId');
533
+
539
534
  if (obj.versions.base.IOS.expandableDetails.ctas[obj.versions.base.IOS.expandableDetails.ctas.length - 1].type === "DEEP_LINK") {
540
535
  const params = _.map(ios, (field, key) => {
541
536
  let actionLink;
@@ -603,13 +598,12 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
603
598
  getMappedEvent = (id, event) => {
604
599
  const map = this.state.eventsMap;
605
600
  if (!map[id] || !map[id][event]) {
606
-
601
+
607
602
  }
608
603
  return map[id][event];
609
604
  };
610
605
 
611
606
  getCurrentWindow = (e) => {
612
-
613
607
  const response = {
614
608
  action: e.action,
615
609
  value: 'edit',
@@ -619,13 +613,12 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
619
613
  };
620
614
 
621
615
  getFormData = (e) => {
622
-
623
616
  const response = {
624
617
  action: "getFormData",
625
618
  value: this.getTransformedData(this.state.formData),
626
619
  validity: this.state.isFormValid,
627
620
  };
628
-
621
+
629
622
  this.setState({checkValidation: true}, this.showError);
630
623
  if (e) {
631
624
  e.source.postMessage(JSON.stringify(response), e.origin);
@@ -635,7 +628,6 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
635
628
 
636
629
 
637
630
  setEditState(data, schema) {
638
-
639
631
  const tabCount = Object.keys(data.versions.base).length;
640
632
  const formData = {};
641
633
  if (this.props.location.query.type === 'embedded' && this.props.location.query.module === "loyalty") {
@@ -775,7 +767,7 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
775
767
  formData[0].base = true;
776
768
  // formData[0].tabKey = '1';
777
769
  // formData[1].tabKey = '2';
778
-
770
+
779
771
  this.setState({templateCta}, () => {
780
772
  this.getSchemaForFormData(formData, schema);
781
773
  this.setState({tabCount, formData, editData: data, currentTab: 1}, () => {
@@ -1361,7 +1353,6 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
1361
1353
 
1362
1354
 
1363
1355
  startTemplateCreation = (data) => {
1364
-
1365
1356
  if (!this.state.isContentEditLoaded && this.state.fullSchema && this.props.Edit.weCrmAccounts) {
1366
1357
  const schema = JSON.stringify(data).indexOf("BIG_PICTURE") > -1 ? this.state.fullSchema.imageSchema : this.state.fullSchema.textSchema;
1367
1358
  this.setMobilePushAccountOptions(this.props.Edit.weCrmAccounts, data.content.accId);
@@ -1377,7 +1368,6 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
1377
1368
  }
1378
1369
  };
1379
1370
  discardValues = () => {
1380
-
1381
1371
  this.resetSchema();
1382
1372
  this.setState({
1383
1373
  formData: {},
@@ -1403,7 +1393,6 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
1403
1393
 
1404
1394
  };
1405
1395
  moveToTemplates = () => {
1406
-
1407
1396
  const modalContent = {
1408
1397
  title: this.props.intl.formatMessage(messages.alertMessage),
1409
1398
  body: this.props.intl.formatMessage(messages.goBackTemporaryChangesLost),
@@ -1478,17 +1467,16 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
1478
1467
  };
1479
1468
 
1480
1469
  saveFormData = (formData) => {
1481
-
1482
1470
  const obj = this.getTransformedData(formData);
1483
-
1471
+
1484
1472
  this.props.actions.editTemplate(obj, this.onUpdateTemplateComplete);
1485
1473
  };
1486
1474
  handleFrameTasks = (e) => {
1487
- //
1475
+ //
1488
1476
  const type = e.data;
1489
-
1477
+
1490
1478
  if (typeof type === 'object') {
1491
- //
1479
+ //
1492
1480
  const action = type.action;
1493
1481
  switch (action) {
1494
1482
  case "startTemplateCreation":
@@ -1509,15 +1497,15 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
1509
1497
  this.getFormData(e);
1510
1498
  break;
1511
1499
  case "startTemplateCreation":
1512
-
1500
+
1513
1501
  //this.getFormData(e);
1514
1502
  break;
1515
1503
  case "moveToTemplates":
1516
-
1504
+
1517
1505
  this.moveToTemplates();
1518
1506
  break;
1519
1507
  case "validateContent":
1520
-
1508
+
1521
1509
  this.validateContent(e);
1522
1510
  break;
1523
1511
  default:
@@ -1726,7 +1714,7 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
1726
1714
  tempContainer = this.injectContainer(tempContainer);
1727
1715
  return tempContainer;
1728
1716
  });
1729
-
1717
+
1730
1718
  this.setState({schema, loadingContentEdit: false}, () => {
1731
1719
  this.removeStandAlone();
1732
1720
  });
@@ -1747,7 +1735,6 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
1747
1735
  this.setState({ schema });
1748
1736
  };
1749
1737
  handleOnTagsContextChange = (data) => {
1750
-
1751
1738
  const query = {
1752
1739
  layout: 'mobilepush',
1753
1740
  type: 'TAG',
@@ -0,0 +1,57 @@
1
+ import {
2
+ RCS,
3
+ UPLOAD_RCS_ASSET_REQUEST,
4
+ CLEAR_RCS_ASSET,
5
+ CREATE_RCS_TEMPLATE_REQUEST,
6
+ CLEAR_CREATE_RESPONSE_REQUEST,
7
+ GET_RCS_TEMPLATE_DETAILS_REQUEST,
8
+ CLEAR_EDIT_RESPONSE_REQUEST,
9
+ EDIT_RCS_TEMPLATE_REQUEST,
10
+ } from './constants';
11
+
12
+ export const uploadRcsAsset = (file, assetType, fileParams, templateType) => ({
13
+ type: UPLOAD_RCS_ASSET_REQUEST,
14
+ file,
15
+ assetType,
16
+ fileParams,
17
+ templateType,
18
+ });
19
+
20
+ export const clearRcsAsset = (templateType) => ({
21
+ type: CLEAR_RCS_ASSET,
22
+ templateType,
23
+ });
24
+
25
+ export const clearCreateResponse = () => ({
26
+ type: CLEAR_CREATE_RESPONSE_REQUEST,
27
+ });
28
+
29
+ export const createTemplate = (template, callback) => ({
30
+ type: CREATE_RCS_TEMPLATE_REQUEST,
31
+ template,
32
+ callback,
33
+ });
34
+
35
+ // FOR EDIT
36
+ export function getTemplateDetails(id, callback) {
37
+ return {
38
+ type: GET_RCS_TEMPLATE_DETAILS_REQUEST,
39
+ id,
40
+ channel: RCS,
41
+ callback,
42
+ };
43
+ }
44
+
45
+ export function editTemplate(template, callback) {
46
+ return {
47
+ type: EDIT_RCS_TEMPLATE_REQUEST,
48
+ template,
49
+ callback,
50
+ };
51
+ }
52
+
53
+ export function clearEditResponse() {
54
+ return {
55
+ type: CLEAR_EDIT_RESPONSE_REQUEST,
56
+ };
57
+ }
@@ -0,0 +1,51 @@
1
+ export const RCS = 'RCS';
2
+ export const SMS = 'SMS';
3
+ export const MEDIUM = 'MEDIUM';
4
+ export const VERTICAL = 'VERTICAL';
5
+ export const RIGHT = 'RIGHT';
6
+ export const STANDALONE = 'STANDALONE';
7
+ export const RICHCARD = 'RICHCARD';
8
+ export const RCS_MEDIA_TYPES = {
9
+ NONE: 'NONE',
10
+ IMAGE: 'IMAGE',
11
+ VIDEO: 'VIDEO',
12
+ };
13
+ export const RCS_DLT_MODE = {
14
+ TEMPLATES: 'templates',
15
+ EDIT: 'editTemplate',
16
+ };
17
+ export const TEMPLATE_DESC_MAX_LENGTH = 1000;
18
+ export const FALLBACK_MESSAGE_MAX_LENGTH = 160;
19
+ export const TEMPLATE_TITLE_MAX_LENGTH = 200;
20
+ export const TAG = 'TAG';
21
+ export const EMBEDDED = 'embedded';
22
+ export const DEFAULT = 'default';
23
+ export const FULL = 'full';
24
+ export const ALL = 'all';
25
+ export const LIBRARY = 'library';
26
+ export const ALLOWED_IMAGE_EXTENSIONS_REGEX = /\.(jpe?g|png)$/i;
27
+ export const RCS_IMG_WIDTH = 1440;
28
+ export const RCS_IMG_HEIGHT = 720;
29
+ export const RCS_IMG_SIZE = 2000000; // 2MB
30
+
31
+ const prefix = 'app/v2Containers/Rcs';
32
+ export const UPLOAD_RCS_ASSET_REQUEST = `${prefix}/UPLOAD_RCS_ASSET_REQUEST`;
33
+ export const UPLOAD_RCS_ASSET_SUCCESS = `${prefix}/UPLOAD_RCS_ASSET_SUCCESS`;
34
+ export const UPLOAD_RCS_ASSET_FAILURE = `${prefix}/UPLOAD_RCS_ASSET_FAILURE`;
35
+ export const CLEAR_RCS_ASSET = `${prefix}/CLEAR_RCS_ASSET`;
36
+
37
+ export const CREATE_RCS_TEMPLATE_REQUEST = `${prefix}/CREATE_RCS_TEMPLATE_REQUEST`;
38
+ export const CREATE_RCS_TEMPLATE_SUCCESS = `${prefix}/CREATE_RCS_TEMPLATE_SUCCESS`;
39
+ export const CREATE_RCS_TEMPLATE_FAILURE = `${prefix}/CREATE_RCS_TEMPLATE_FAILURE`;
40
+ export const CLEAR_CREATE_RESPONSE_REQUEST = `${prefix}/Create/CLEAR_CREATE_RESPONSE_REQUEST`;
41
+
42
+
43
+ export const GET_RCS_TEMPLATE_DETAILS_REQUEST = `${prefix}/GET_RCS_TEMPLATE_DETAILS_REQUEST`;
44
+ export const GET_RCS_TEMPLATE_DETAILS_SUCCESS = `${prefix}/GET_RCS_TEMPLATE_DETAILS_SUCCESS`;
45
+ export const GET_RCS_TEMPLATE_DETAILS_FAILURE = `${prefix}/GET_RCS_TEMPLATE_DETAILS_FAILURE`;
46
+
47
+ export const EDIT_RCS_TEMPLATE_REQUEST = `${prefix}/EDIT_RCS_TEMPLATE_REQUEST`;
48
+ export const EDIT_RCS_TEMPLATE_SUCCESS = `${prefix}/EDIT_RCS_TEMPLATE_SUCCESS`;
49
+ export const EDIT_RCS_TEMPLATE_FAILURE = `${prefix}/EDIT_RCS_TEMPLATE_FAILURE`;
50
+ export const CLEAR_EDIT_RESPONSE_REQUEST = `${prefix}/Edit/CLEAR_EDIT_RESPONSE_REQUEST`;
51
+