@capillarytech/creatives-library 3.0.4 → 3.0.6

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 (71) hide show
  1. package/components/FormBuilder/index.js +15 -15
  2. package/containers/Dashboard/index.js +5 -0
  3. package/containers/Email/index.js +5 -4
  4. package/containers/Line/Create/index.js +3 -3
  5. package/containers/MobilePush/Edit/index.js +2 -2
  6. package/containers/WeChat/MapTemplates/index.js +64 -58
  7. package/containers/WeChat/RichmediaTemplates/Create/index.js +3 -3
  8. package/index.html +3 -0
  9. package/package.json +1 -1
  10. package/routes.js +1 -3
  11. package/v2Components/FormBuilder/index.js +12 -18
  12. package/v2Components/NavigationBar/index.js +7 -4
  13. package/v2Components/NavigationBar/messages.js +6 -2
  14. package/v2Containers/Cap/index.js +2 -1
  15. package/v2Containers/CreativesContainer/SlideBoxContent.js +6 -2
  16. package/v2Containers/Email/index.js +27 -42
  17. package/v2Containers/Email/initialSchema.js +2 -58
  18. package/v2Containers/Email/messages.js +4 -0
  19. package/v2Containers/Email/sagas.js +0 -2
  20. package/v2Containers/MobilePush/Create/actions.js +2 -2
  21. package/v2Containers/MobilePush/Create/index.js +17 -16
  22. package/v2Containers/MobilePush/Create/messages.js +1 -1
  23. package/v2Containers/MobilePush/Create/sagas.js +3 -0
  24. package/v2Containers/MobilePush/Edit/index.js +13 -7
  25. package/v2Containers/MobilePush/initialSchema.js +3 -0
  26. package/v2Containers/MobilepushWrapper/index.js +3 -1
  27. package/v2Containers/Templates/index.js +14 -11
  28. package/assets/android-message-gui-2.svg +0 -55
  29. package/components/CallTaskPreview/_callTaskPreview.scss +0 -17
  30. package/components/CallTaskPreview/images/Footer.png +0 -0
  31. package/components/CallTaskPreview/images/Header.png +0 -0
  32. package/components/CallTaskPreview/index.js +0 -37
  33. package/components/CallTaskPreview/messages.js +0 -13
  34. package/components/CallTaskPreview/tests/index.test.js +0 -15
  35. package/components/CmsTemplatesComponent/index.js +0 -33
  36. package/components/CmsTemplatesComponent/messages.js +0 -17
  37. package/components/CmsTemplatesComponent/tests/index.test.js +0 -10
  38. package/components/EmailMobilePreview/index.js +0 -129
  39. package/components/EmailMobilePreview/index.scss +0 -55
  40. package/components/EmailPreviewV2/_emailPreviewV2.scss +0 -69
  41. package/components/EmailPreviewV2/index.js +0 -132
  42. package/components/EmailPreviewV2/messages.js +0 -41
  43. package/components/EmailPreviewV2/tests/index.test.js +0 -10
  44. package/components/MobilePushPreviewV2/index.js +0 -120
  45. package/components/MobilePushPreviewV2/messages.js +0 -13
  46. package/components/MobilePushPreviewV2/tests/index.test.js +0 -10
  47. package/components/NewCallTask/_newCallTask.scss +0 -9
  48. package/components/NewCallTask/index.js +0 -152
  49. package/components/NewCallTask/messages.js +0 -29
  50. package/components/NewCallTask/tests/index.test.js +0 -10
  51. package/components/SmsPreviewV2/_smsPreviewV2.scss +0 -353
  52. package/components/SmsPreviewV2/index.js +0 -69
  53. package/components/SmsPreviewV2/messages.js +0 -13
  54. package/components/SmsPreviewV2/tests/index.test.js +0 -10
  55. package/v2Components/DateFilter/index.js +0 -349
  56. package/v2Components/DateFilter/messages.js +0 -17
  57. package/v2Components/DateFilter/tests/index.test.js +0 -15
  58. package/v2Components/DateRange/index.js +0 -113
  59. package/v2Components/DateRange/messages.js +0 -13
  60. package/v2Components/DateRange/tests/index.test.js +0 -10
  61. package/v2Components/PageHeader/_pageHeader.scss +0 -22
  62. package/v2Components/PageHeader/index.js +0 -37
  63. package/v2Components/PageHeader/messages.js +0 -13
  64. package/v2Components/PageHeader/tests/index.test.js +0 -10
  65. package/v2Components/Sidebar/_sidebar.scss +0 -115
  66. package/v2Components/Sidebar/index.js +0 -208
  67. package/v2Components/Sidebar/messages.js +0 -21
  68. package/v2Components/Sidebar/tests/index.test.js +0 -10
  69. package/v2Components/SmsEditor/index.js +0 -55
  70. package/v2Components/SmsEditor/tests/index.test.js +0 -10
  71. package/v2Components/TopBar/_topbar.scss +0 -46
@@ -247,7 +247,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
247
247
  }
248
248
  }
249
249
 
250
- onEdit(data, e) {
250
+ onEdit() {
251
251
 
252
252
  }
253
253
 
@@ -307,7 +307,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
307
307
  });
308
308
  }
309
309
 
310
- handleCloseModal = (data, e) => {
310
+ handleCloseModal = () => {
311
311
  const event = this.state.currentEvent;
312
312
  if (!_.isEmpty(this.state.currentEvent)) {
313
313
  switch (event) {
@@ -467,15 +467,15 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
467
467
  const tagValidationResponse = this.validateTags(content, tags, injectedTags);
468
468
 
469
469
  if (tagValidationResponse.valid) {
470
- errorData['0']['message-editor'] = false;
470
+ _.set(errorData, `['0']['message-editor']`, false);
471
471
  } else {
472
472
 
473
- errorData['0']['message-editor'] = true;
473
+ _.set(errorData, `['0']['message-editor']`, true);
474
474
  isValid = false;
475
475
  }
476
476
  if (content.trim() === '') {
477
477
 
478
- errorData['0']['message-editor'] = true;
478
+ _.set(errorData, `['0']['message-editor']`, true);
479
479
  isValid = false;
480
480
  }
481
481
  }
@@ -485,19 +485,19 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
485
485
  const imgContentLengthPreview = this.state.formData['0'].imagePreview.length;
486
486
  if ( (imgContentLength < 1) && (imgContentLengthPreview < 1) ) {
487
487
 
488
- errorData['0'].image = true;
489
- errorData['0'].imagePreview = true;
488
+ _.set(errorData, `['0'].image`, true);
489
+ _.set(errorData, `['0'].imagePreview`, true);
490
490
  isValid = false;
491
491
  }else{
492
- errorData['0'].image = false;
493
- errorData['0'].imagePreview = false;
492
+ _.set(errorData, `['0'].image`, false);
493
+ _.set(errorData, `['0'].imagePreview`, false);
494
494
  }
495
495
  }
496
496
  if(type !== 'embedded' && (!this.state.formData['template-name'] || this.state.formData['template-name'] === '')) {
497
- errorData['template-name'] = true;
497
+ _.set(errorData, `['template-name']`, true);
498
498
  isValid = false;
499
499
  } else {
500
- errorData['template-name'] = false;
500
+ _.set(errorData, `['template-name']`, false);
501
501
  }
502
502
  }
503
503
 
@@ -1068,7 +1068,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
1068
1068
  this.setState({errorData});
1069
1069
  }
1070
1070
 
1071
- initializeMultiColSection(section, formDataObj, isContainer, index, ifError, paneIndex) {
1071
+ initializeMultiColSection(section, formDataObj, isContainer, index, ifError) {
1072
1072
  const formData = _.cloneDeep(formDataObj);
1073
1073
  const newFormData = {};
1074
1074
  newFormData[index] = {};
@@ -1298,7 +1298,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
1298
1298
  this.setState({formData, errorData}, () => {
1299
1299
  this.validateForm();
1300
1300
  if (this.props.isSchemaChanged || resetTabKeys) {
1301
- this.resetTabKeys(formData, this.props.tabCount, true);
1301
+ this.resetTabKeys(this.state.formData, this.props.tabCount, true);
1302
1302
  }
1303
1303
  });
1304
1304
  }
@@ -1802,7 +1802,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
1802
1802
  }
1803
1803
  return true;
1804
1804
  };
1805
- callChildEvent(data, val, event, e) {
1805
+ callChildEvent(data, val, event) {
1806
1806
  if (!event) {
1807
1807
  return;
1808
1808
  }
@@ -2834,7 +2834,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
2834
2834
  key={`icon-${val.id}`}
2835
2835
  id={val.id}
2836
2836
  offset={val.offset}
2837
- width={val.width ? val.width : 1}
2837
+ span={val.width ? val.width : 1}
2838
2838
  onClick={(data) => this.callChildEvent(data, val, val.submitAction)}
2839
2839
  className={val.className ? val.className : ''}
2840
2840
  style={val.colStyle ? val.colStyle : {}}
@@ -12,6 +12,11 @@ import * as actions from './actions';
12
12
  import PageHeader from '../../components/PageHeader';
13
13
  import BreadCrumbs from '../../components/BreadCrumbs/index';
14
14
  export class Dashboard extends React.Component { // eslint-disable-line react/prefer-stateless-function
15
+ componentWillMount() {
16
+ this.props.router.push({
17
+ pathname: `/sms`,
18
+ });
19
+ }
15
20
  render() {
16
21
  const breadCrumbLocations = [
17
22
  {
@@ -1758,9 +1758,9 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
1758
1758
  "base": {},
1759
1759
  };
1760
1760
  const baseData = {};
1761
- const baseLanguage = props.Global.currentOrgDetails.basic_details.base_language;
1761
+ const baseLanguage = props.Global.currentOrgDetails.basic_details.base_language || 'en';
1762
1762
  this.supportedLanguages = props.Global.currentOrgDetails.basic_details.supported_languages;
1763
- const languageObject = this.supportedLanguages[_.findIndex(this.supportedLanguages, {iso_code: baseLanguage})];
1763
+ const languageObject = this.supportedLanguages[_.findIndex(this.supportedLanguages, {iso_code: baseLanguage})] || {iso_code: baseLanguage || 'en', lang_id: -1, language: baseLanguage || "English"};
1764
1764
  baseData.activeTab = baseLanguage;
1765
1765
  baseData[languageObject.iso_code] = {};
1766
1766
  baseData[languageObject.iso_code].is_drag_drop = false;
@@ -2000,6 +2000,7 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
2000
2000
  });
2001
2001
  console.log('HandleHideMarkAsFinal ', JSON.stringify(schema));
2002
2002
  this.setState({schema, isSchemaChanged: true});
2003
+ return schema;
2003
2004
  }
2004
2005
 
2005
2006
  showSubject = () => {
@@ -2493,14 +2494,14 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
2493
2494
  const baseLanguage = this.props.Global.currentOrgDetails && this.props.Global.currentOrgDetails.basic_details && this.props.Global.currentOrgDetails.basic_details.base_language && this.props.Global.currentOrgDetails.basic_details.base_language !== "" ? this.props.Global.currentOrgDetails.basic_details.base_language : 'en';
2494
2495
  const supportedLanguages = this.props.Global.currentOrgDetails.basic_details.supported_languages;
2495
2496
  if (!supportedLanguages) {
2496
- tempEl.value = 'English';
2497
+ tempEl.value = baseLanguage || 'English';
2497
2498
  return;
2498
2499
  }
2499
2500
  const langObject = supportedLanguages.find( (lang) => lang.iso_code === baseLanguage);
2500
2501
  if (langObject) {
2501
2502
  tempEl.value = langObject.language;
2502
2503
  } else {
2503
- tempEl.value = 'English';
2504
+ tempEl.value = baseLanguage || 'English';
2504
2505
  }
2505
2506
  }
2506
2507
  });
@@ -62,7 +62,7 @@ export class Line extends Component {
62
62
  this.state = {
63
63
  schema: {},
64
64
  isSchemaChanged: false,
65
- formData: {},
65
+ formData: {0: {}},
66
66
  tabCount: 1,
67
67
  currentTab: 1,
68
68
  loading: false,
@@ -757,7 +757,7 @@ export class Line extends Component {
757
757
  </Row>
758
758
  <Row>
759
759
  <Col>
760
- <FormBuilder
760
+ {!_.isEmpty(this.state.schema) && <FormBuilder
761
761
  key={"form builder"}
762
762
  schema={this.state.schema}
763
763
  onSubmit={this.saveFormData}
@@ -781,7 +781,7 @@ export class Line extends Component {
781
781
  router={this.props.router}
782
782
  onContextChange={this.handleOnTagsContextChange}
783
783
  setModalContent={this.setModalContent}
784
- />
784
+ /> }
785
785
  </Col>
786
786
  </Row>
787
787
  </Spin>
@@ -1967,7 +1967,7 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
1967
1967
  };
1968
1968
  addPrimaryCta = (ev, field, inputSchema) => {
1969
1969
  const selectedWeChatAccount = (!_.isEmpty(this.props.Templates.selectedWeChatAccount) ? this.props.Templates.selectedWeChatAccount : this.props.Edit.selectedWeChatAccount);
1970
- const id = field ? field.id : ev.target.id;
1970
+ const id = ev ? ev.target.id : field.id;
1971
1971
  const schema = inputSchema ? _.cloneDeep(inputSchema) : _.cloneDeep(this.state.schema);
1972
1972
  const ck = selectedWeChatAccount.configs ? !!selectedWeChatAccount.configs.deeplink : false;
1973
1973
  const deepLinkOptions = selectedWeChatAccount ? _.map(JSON.parse(ck ? selectedWeChatAccount.configs.deeplink : '[]'), (link) => ({label: link.name, value: link.link, title: link.link }) ) : [];
@@ -2099,7 +2099,7 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
2099
2099
  };
2100
2100
 
2101
2101
  addSecondoryCta = (ev, field, inputSchema) => {
2102
- const id = field ? field.id : ev.target.id;
2102
+ const id = ev ? ev.target.id : field.id;
2103
2103
  const schema = inputSchema ? _.cloneDeep(inputSchema) : _.cloneDeep(this.state.schema);
2104
2104
  const selectedWeChatAccount = (!_.isEmpty(this.props.Templates.selectedWeChatAccount) ? this.props.Templates.selectedWeChatAccount : this.props.Edit.selectedWeChatAccount);
2105
2105
  const ck = selectedWeChatAccount.configs ? !!selectedWeChatAccount.configs.deeplink : false;
@@ -114,6 +114,7 @@ export class MapTemplates extends React.Component { // eslint-disable-line react
114
114
  this.injectMultiColSection = this.injectMultiColSection.bind(this);
115
115
  this.getMappedEvent = this.getMappedEvent.bind(this);
116
116
  this.showNext = this.showNext.bind(this);
117
+ this.getFormData = this.getFormData.bind(this);
117
118
  this.updateSchema = false;
118
119
  this.fetchedWeCrmAccount = false;
119
120
  this.isAccountChange = false;
@@ -329,6 +330,7 @@ export class MapTemplates extends React.Component { // eslint-disable-line react
329
330
  let selectedTemplate = {};
330
331
  let selectedTemplateData = {};
331
332
  if (this.props.location.query.type === 'embedded' && (this.props.location.query.module === 'loyalty')) {
333
+ selectedTemplateData = this.state.editTemplateData;
332
334
  if (this.props.params.id && _.isEmpty(this.props.WeChat.weChatTemplates) && _.isEqual(formData['wechat-template'], this.state.formData['wechat-template'])) {
333
335
  console.log('In If', formData['wechat-template']);
334
336
  selectedTemplate = {
@@ -338,9 +340,9 @@ export class MapTemplates extends React.Component { // eslint-disable-line react
338
340
  };
339
341
  selectedTemplateData = this.props.WeChat.templateDetails;
340
342
  } else {
341
- console.log('In Else', formData['wechat-template']);
343
+ const editTemplateData = this.state.editTemplateData;
342
344
  _.forEach(this.props.WeChat.weChatTemplates, (template) => {
343
- if (template.versions.base.template_id === formData['wechat-template']) {
345
+ if (template.versions.base.template_id === formData['wechat-template'] && formData['wechat-template'] !== _.get(editTemplateData, 'versions.base.template_id') ) { // not changing if already selected templates comes
344
346
  selectedTemplate = {
345
347
  template_id: template.versions.base.template_id,
346
348
  title: template.versions.base.Title,
@@ -370,57 +372,63 @@ export class MapTemplates extends React.Component { // eslint-disable-line react
370
372
  if (this.isAccountChange) {
371
373
  selectedTemplateData = {};
372
374
  }
373
- this.setState({formData, editTemplateData: selectedTemplateData}, () => {
374
- if (!_.isEmpty(this.state.editTemplateData) && this.props.location.query.type === 'embedded' && this.props.location.query.module === 'loyalty') {
375
- this.setEditData();
376
- }
377
- if (this.props.WeChat.selectedWeChatAccount && !_.isEqual(this.props.WeChat.selectedWeChatAccount.name, formData['wechat-accounts']) && this.props.location.query.type === 'embedded' && this.props.location.query.module === 'loyalty') {
378
- let selectedAccount = {};
379
- _.forEach(this.props.WeChat.weCrmAccounts, (account) => {
380
- if (account.configs && account.configs.is_wecrm_enabled) {
381
- if (account.name === formData['wechat-accounts']) {
382
- selectedAccount = account;
375
+ const newState = {formData};
376
+ if (!_.isEqual(this.state.editTemplateData, selectedTemplateData)) {
377
+ newState.editTemplateData = selectedTemplateData;
378
+ }
379
+ if (!_.isEqual(this.state.formData, formData)) {
380
+ this.setState(newState, () => {
381
+ if (!_.isEmpty(this.state.editTemplateData) && this.props.location.query.type === 'embedded' && this.props.location.query.module === 'loyalty') {
382
+ this.setEditData();
383
+ }
384
+ if (this.props.WeChat.selectedWeChatAccount && !_.isEqual(this.props.WeChat.selectedWeChatAccount.name, formData['wechat-accounts']) && this.props.location.query.type === 'embedded' && this.props.location.query.module === 'loyalty') {
385
+ let selectedAccount = {};
386
+ _.forEach(this.props.WeChat.weCrmAccounts, (account) => {
387
+ if (account.configs && account.configs.is_wecrm_enabled) {
388
+ if (account.name === formData['wechat-accounts']) {
389
+ selectedAccount = account;
390
+ }
383
391
  }
384
- }
385
- });
386
- this.props.actions.setWeChatAccount(selectedAccount);
387
- this.setSelectedTemplateData({});
388
- }
389
- if ((selectedWechatTemplateIndex !== -1 || this.state.isEdit) && !_.isEmpty(selectedTemplate)) {
390
- let templateData = {};
391
- if (this.state.isEdit && !_.isEmpty(this.state.editTemplateData)) {
392
- templateData = {
393
- template_id: this.state.editTemplateData.versions.base.template_id,
394
- title: this.state.editTemplateData.versions.base.Title,
395
- content: this.state.editTemplateData.versions.base.content,
396
- };
397
- if (this.props.location.query.type === 'embedded' && this.props.location.query.module === 'loyalty') {
398
- if (_.isEqual(this.props.WeChat.selectedWeChatAccount.name, formData['wechat-accounts'])) {
399
- this.setSelectedTemplateData(selectedTemplate);
392
+ });
393
+ this.props.actions.setWeChatAccount(selectedAccount);
394
+ this.setSelectedTemplateData({});
395
+ }
396
+ if ((selectedWechatTemplateIndex !== -1 || this.state.isEdit) && !_.isEmpty(selectedTemplate)) {
397
+ let templateData = {};
398
+ if (this.state.isEdit && !_.isEmpty(this.state.editTemplateData)) {
399
+ templateData = {
400
+ template_id: this.state.editTemplateData.versions.base.template_id,
401
+ title: this.state.editTemplateData.versions.base.Title,
402
+ content: this.state.editTemplateData.versions.base.content,
403
+ };
404
+ if (this.props.location.query.type === 'embedded' && this.props.location.query.module === 'loyalty') {
405
+ if (_.isEqual(this.props.WeChat.selectedWeChatAccount.name, formData['wechat-accounts'])) {
406
+ this.setSelectedTemplateData(selectedTemplate);
407
+ }
408
+ } else {
409
+ const templateTags = this.getTagsFromContent(templateData.content);
410
+ this.prepareWeChatPreviewData(templateData, templateTags);
400
411
  }
412
+ } else if (!this.updateSchema) {
413
+ const templateTags = this.getTagsFromContent(selectedTemplate.content);
414
+ this.prepareWeChatPreviewData(selectedTemplate, templateTags);
401
415
  } else {
402
- const templateTags = this.getTagsFromContent(templateData.content);
403
- this.prepareWeChatPreviewData(templateData, templateTags);
416
+ this.updateSchema = false;
417
+ this.setSelectedTemplateData(selectedTemplate);
404
418
  }
405
- } else if (!this.updateSchema) {
406
- const templateTags = this.getTagsFromContent(selectedTemplate.content);
407
- this.prepareWeChatPreviewData(selectedTemplate, templateTags);
408
419
  } else {
409
- this.updateSchema = false;
410
- this.setSelectedTemplateData(selectedTemplate);
411
- }
412
- } else {
413
- let selectedAccount = {};
414
- _.forEach(this.props.WeChat.weCrmAccounts, (account) => {
415
- if (account.configs && account.configs.is_wecrm_enabled) {
416
- if (account.name === formData['wechat-accounts']) {
417
- selectedAccount = account;
420
+ let selectedAccount = {};
421
+ _.forEach(this.props.WeChat.weCrmAccounts, (account) => {
422
+ if (account.configs && account.configs.is_wecrm_enabled) {
423
+ if (account.name === formData['wechat-accounts']) {
424
+ selectedAccount = account;
425
+ }
418
426
  }
419
- }
420
- });
421
- this.props.actions.setWeChatAccount(selectedAccount);
422
- }
423
- });
427
+ });
428
+ this.props.actions.setWeChatAccount(selectedAccount);
429
+ }
430
+ });
431
+ }
424
432
  }
425
433
 
426
434
  onTagSelect(data, currentTab, value) {
@@ -1037,10 +1045,8 @@ export class MapTemplates extends React.Component { // eslint-disable-line react
1037
1045
  myField.value += myValue;
1038
1046
  }
1039
1047
  const formData = _.cloneDeep(this.state.formData);
1040
- if (currentTab) {
1041
- formData[currentTab - 1][field.id] = myField.value;
1042
- }
1043
- this.setState({formData});
1048
+ formData[field.id] = myField.value;
1049
+ this.onFormDataChange(formData);
1044
1050
  }
1045
1051
 
1046
1052
  internalUrlChecked() {
@@ -1155,15 +1161,15 @@ export class MapTemplates extends React.Component { // eslint-disable-line react
1155
1161
  }
1156
1162
 
1157
1163
  hideSchemaElementsByModule(schema) {
1158
- schema.standalone.sections[0].childSections[0].inputFields[0].cols[0].colStyle.display = (this.props.location.query.type === 'embedded' ? 'none' : 'block');
1159
- schema.standalone.sections[0].childSections[0].inputFields[0].cols[1].colStyle.display = (this.props.location.query.type === 'embedded' ? 'none' : 'block');
1160
- schema.standalone.sections[0].childSections[0].inputFields[0].cols[2].colStyle.display = (this.props.location.query.type === 'embedded' ? 'none' : 'block');
1161
- schema.standalone.sections[0].childSections[0].inputFields[0].cols[3].colStyle.display = (this.props.location.query.type === 'embedded' ? 'none' : 'block');
1164
+ _.set(schema, 'standalone.sections[0].childSections[0].inputFields[0].cols[0].colStyle.display', this.props.location.query.type === 'embedded' ? 'none' : 'block');
1165
+ _.set(schema, 'standalone.sections[0].childSections[0].inputFields[0].cols[1].colStyle.display', this.props.location.query.type === 'embedded' ? 'none' : 'block');
1166
+ _.set(schema, 'standalone.sections[0].childSections[0].inputFields[0].cols[2].colStyle.display', this.props.location.query.type === 'embedded' ? 'none' : 'block');
1167
+ _.set(schema, 'standalone.sections[0].childSections[0].inputFields[0].cols[3].colStyle.display', this.props.location.query.type === 'embedded' ? 'none' : 'block');
1162
1168
 
1163
- schema.standalone.sections[0].childSections[1].childSections[0].childSections[0].inputFields[0].labelStyle.display = (this.props.location.query.module === 'loyalty' ? 'block' : 'none');
1164
- schema.standalone.sections[0].childSections[1].childSections[0].childSections[0].inputFields[0].style.display = (this.props.location.query.module === 'loyalty' ? 'block' : 'none');
1169
+ _.set(schema, 'standalone.sections[0].childSections[1].childSections[0].childSections[0].inputFields[0].labelStyle.display', this.props.location.query.module === 'loyalty' ? 'block' : 'none');
1170
+ _.set(schema, 'standalone.sections[0].childSections[1].childSections[0].childSections[0].inputFields[0].style.display', this.props.location.query.module === 'loyalty' ? 'block' : 'none');
1165
1171
 
1166
- schema.standalone.sections[0].childSections[1].childSections[0].childSections[0].inputFields[1].disabled = (this.props.params.id && this.props.location.query.module !== 'loyalty');
1172
+ _.set(schema, 'standalone.sections[0].childSections[1].childSections[0].childSections[0].inputFields[1].disabled', this.props.params.id && this.props.location.query.module !== 'loyalty');
1167
1173
  return schema;
1168
1174
  }
1169
1175
 
@@ -14,7 +14,7 @@ import { createStructuredSelector } from 'reselect';
14
14
  import { injectIntl, intlShape, FormattedMessage } from 'react-intl';
15
15
  import _ from 'lodash';
16
16
  import { Menu, Dropdown } from 'antd';
17
- import { CapRow, CapColumn, CapButton, CapCard, CapSpin } from '@capillarytech/cap-react-ui-library';
17
+ import { CapRow, CapColumn, CapButton, CapCard, CapSpinner } from '@capillarytech/cap-react-ui-library';
18
18
  import makeSelectCreate, {makeSelectTemplates, getAssetDetails, getContentAssetDetails} from './selectors';
19
19
  import * as actions from './actions';
20
20
  import richmediaschema from './richmediaschema';
@@ -970,7 +970,7 @@ export class Create extends React.Component { // eslint-disable-line react/prefe
970
970
  }
971
971
  return (
972
972
  <div className="richmedia-container">
973
- <CapSpin spinning={this.state.loading}>
973
+ <CapSpinner spinning={this.state.loading}>
974
974
  {this.state.showPreview && <WechatRichmediaTemplatePreview
975
975
  show={this.state.showPreview}
976
976
  closeSlideBox={this.closeSlideBox}
@@ -1012,7 +1012,7 @@ export class Create extends React.Component { // eslint-disable-line react/prefe
1012
1012
  </CapRow>
1013
1013
  </div>
1014
1014
  </div>
1015
- </CapSpin>
1015
+ </CapSpinner>
1016
1016
  </div>
1017
1017
  );
1018
1018
  }
package/index.html CHANGED
@@ -7,6 +7,9 @@
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1">
8
8
  <!-- Allow installing the app to the homescreen -->
9
9
  <meta name="mobile-web-app-capable" content="yes">
10
+ <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
11
+ <meta http-equiv="Pragma" content="no-cache" />
12
+ <meta http-equiv="Expires" content="0" />
10
13
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
11
14
  <script src="https://use.typekit.net/ifw1ntv.js"></script>
12
15
  <!-- Roboto Font -->
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capillarytech/creatives-library",
3
3
  "author": "meharaj",
4
- "version": "3.0.4",
4
+ "version": "3.0.6",
5
5
  "description": "Capillary creatives ui",
6
6
  "main": "./index.js",
7
7
  "module": "./index.es.js",
package/routes.js CHANGED
@@ -604,7 +604,6 @@ export default function createRoutes(store) {
604
604
  import('v2Containers/TemplatesV2'),
605
605
  import('v2Containers/Cap/reducer'),
606
606
  import('v2Containers/Cap/sagas'),
607
- import('v2Containers/Email/sagas'),
608
607
  import('v2Containers/CreativesContainer/reducer'),
609
608
  import('v2Containers/Sms/Create/reducer'),
610
609
  import('v2Containers/Sms/Create/sagas'),
@@ -627,7 +626,7 @@ export default function createRoutes(store) {
627
626
  importModules.then(([reducer,
628
627
  sagas, component,
629
628
  capReducer, capSagas,
630
- emailContainerSagas, creativesContainerReducer,
629
+ creativesContainerReducer,
631
630
  smsCreateReducer, smsCreateSaga, smsEditReducer, smsEditSaga,
632
631
  emailReducer, emailSaga,
633
632
  callTaskReducer, callTaskSagas,
@@ -648,7 +647,6 @@ export default function createRoutes(store) {
648
647
  injectSagas(gallerySagas.default);
649
648
  injectSagas(sagas.default);
650
649
  injectSagas(capSagas.default);
651
- injectSagas(emailContainerSagas.default);
652
650
  injectSagas(smsCreateSaga.default);
653
651
  injectSagas(smsEditSaga.default);
654
652
  injectSagas(emailSaga.default);
@@ -109,7 +109,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
109
109
  }
110
110
  if (nextProps.startValidation && nextProps.startValidation !== false && this.props.startValidation !== nextProps.startValidation) {
111
111
  this.setState({checkValidation: true});
112
- this.validateForm(null, null, null, true, () => {
112
+ this.validateForm(null, null, true, true, () => {
113
113
  //triggering the saveFormData or onSubmit when validation sets isFormValid to TRUE
114
114
  if (this.state.isFormValid) {
115
115
  this.saveForm(true);
@@ -789,7 +789,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
789
789
  androidData[data] = this.state.formData[0][data];
790
790
  }
791
791
  }
792
- if(_.isEmpty(androidData) && this.state.currentTab === 2){
792
+ if(_.isEmpty(androidData) && this.state.currentTab == 2){
793
793
  this.setState({androidValid, iosValid}, () => {
794
794
  this.props.setModalContent('ios');
795
795
  });
@@ -804,7 +804,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
804
804
  iosData[data] = this.state.formData[1][data];
805
805
  }
806
806
  }
807
- if(_.isEmpty(iosData) && this.state.currentTab === 1){
807
+ if(_.isEmpty(iosData) && this.state.currentTab == 1){
808
808
  this.setState({androidValid, iosValid}, () => {
809
809
  this.props.setModalContent('android');
810
810
  });
@@ -1879,17 +1879,20 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
1879
1879
  const that = this;
1880
1880
  this.setState({tabKey: `${data}`});
1881
1881
  setTimeout(() => {
1882
- if (this.props.isNewVersionFlow) {
1883
- const formData = _.cloneDeep(this.state.formData);
1884
- let activeTabIndex = '1';
1885
- const elems = document.getElementsByClassName("ant-tabs-tab");
1882
+ let activeTabIndex = '1';
1883
+ let selector = ".ant-tabs-tab";
1884
+ if (this.props.schema.channel.toUpperCase() === "MOBILEPUSH") {
1885
+ selector = `.mobilepush-wrapper ${selector}`;
1886
+ }
1887
+ const elems = document.querySelectorAll(selector);
1886
1888
 
1887
- for (let i = 0; i < elems.length; i += 1) {
1889
+ for (let i = 0; i < elems.length; i += 1) {
1888
1890
  if (elems.item(i).classList.contains("ant-tabs-tab-active")) {
1889
1891
  activeTabIndex = i + 1;
1890
1892
  }
1891
1893
  }
1892
-
1894
+ if (this.props.isNewVersionFlow) {
1895
+ const formData = _.cloneDeep(this.state.formData);
1893
1896
  formData[(this.state.currentTab - 1)].activeTab = formData[(this.state.currentTab - 1)].selectedLanguages[activeTabIndex - 1];
1894
1897
  formData[(this.state.currentTab - 1)].tabKey = `${data}`;
1895
1898
  if (formData[(this.state.currentTab - 1)].base) {
@@ -1901,15 +1904,6 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
1901
1904
  val.injectedEvents[event].call(that.props.parent, this.state.currentTab, formData);
1902
1905
  });
1903
1906
  } else {
1904
- let activeTabIndex = '1';
1905
- const elems = document.getElementsByClassName("ant-tabs-tab");
1906
-
1907
- for (let i = 0; i < elems.length; i += 1) {
1908
- if (elems.item(i).classList.contains("ant-tabs-tab-active")) {
1909
- activeTabIndex = i + 1;
1910
- }
1911
- }
1912
-
1913
1907
  that.setState({currentTab: activeTabIndex});
1914
1908
  val.injectedEvents[event].call(that.props.parent, activeTabIndex);
1915
1909
  }
@@ -120,6 +120,10 @@ class NavigationBar extends React.Component {
120
120
  return productsList;
121
121
  };
122
122
 
123
+ setDefaultSelectedProduct = () => {
124
+ const { intl, campaignOrgV2Status } = this.props;
125
+ return campaignOrgV2Status ? intl.formatMessage(messages.selectedProductDefaultEngage) : intl.formatMessage(messages.selectedProductDefaultCampaigns);
126
+ }
123
127
  getTopbarIcons = () => [
124
128
  {
125
129
  iconType: 'help',
@@ -176,7 +180,6 @@ class NavigationBar extends React.Component {
176
180
  const {
177
181
  topbarMenuData,
178
182
  loggedIn,
179
- intl,
180
183
  type,
181
184
  } = this.props;
182
185
  const productsList = this.getProductsList();
@@ -192,9 +195,8 @@ class NavigationBar extends React.Component {
192
195
  <TopBar
193
196
  productsList={productsList}
194
197
  selectedProduct={
195
- selectedProduct ||
196
- intl.formatMessage(messages.selectedProductDefault)
197
- }
198
+ selectedProduct || this.setDefaultSelectedProduct()
199
+ }
198
200
  handleProductChange={this.handleProductChange}
199
201
  proxyOrgList={proxyOrgList}
200
202
  selectedOrg={selectedOrg}
@@ -230,6 +232,7 @@ NavigationBar.propTypes = {
230
232
  intl: intlShape.isRequired,
231
233
  location: PropTypes.object,
232
234
  type: PropTypes.string,
235
+ campaignOrgV2Status: PropTypes.bool,
233
236
  };
234
237
 
235
238
  export default injectIntl(NavigationBar);
@@ -13,8 +13,12 @@ export default defineMessages({
13
13
  id: `${scope}.header`,
14
14
  defaultMessage: 'This is the NavigationBar component!',
15
15
  },
16
- selectedProductDefault: {
17
- id: `${scope}.selectedProductDefault`,
16
+ selectedProductDefaultEngage: {
17
+ id: `${scope}.selectedProductDefaultEngage`,
18
+ defaultMessage: 'Engage+',
19
+ },
20
+ selectedProductDefaultCampaigns: {
21
+ id: `${scope}.selectedProductDefaultCampaigns`,
18
22
  defaultMessage: 'Campaigns',
19
23
  },
20
24
  });
@@ -157,7 +157,7 @@ export class Cap extends React.Component { // eslint-disable-line react/prefer-s
157
157
 
158
158
  render() {
159
159
  const { Global, location } = this.props;
160
- const { topbarMenuData, isLoggedIn } = Global;
160
+ const { topbarMenuData, isLoggedIn, currentOrgDetails } = Global;
161
161
  const topbarMenuDataOptions = topbarMenuData && topbarMenuData.data ? topbarMenuData.data : [];
162
162
  const type = this.props.location.query.type;
163
163
  const toastMessages = this.props.Global.messages;
@@ -183,6 +183,7 @@ export class Cap extends React.Component { // eslint-disable-line react/prefer-s
183
183
  loggedIn={isLoggedIn}
184
184
  topbarMenuData={topbarMenuDataOptions}
185
185
  location={location}
186
+ campaignOrgV2Status={currentOrgDetails.org_campaign_v2_status}
186
187
  /> : ''}
187
188
  <div className="main" style={{minHeight: 'calc(100vh - 74px', position: 'relative', top: '74px'}}>
188
189
 
@@ -1,6 +1,7 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import styled from 'styled-components';
4
+ import get from 'lodash/get';
4
5
  import TemplatesV2 from '../TemplatesV2';
5
6
  import TemplatePreview from '../../v2Components/TemplatePreview';
6
7
  import SmsCreate from '../Sms/Create';
@@ -98,7 +99,8 @@ function SlideBoxContent(props) {
98
99
  )}
99
100
  {isPreview && (
100
101
  <TemplatePreview
101
- content={templateData.versions.base['sms-editor']}
102
+ content={get(templateData, `versions.base['sms-editor']`)}
103
+ unicodeEnabled={get(templateData, `versions.base['unicode-validity']`)}
102
104
  channel={templateData.type.toLowerCase()}
103
105
  charCounterEnabled
104
106
  templateData={templateData}
@@ -211,6 +213,7 @@ function SlideBoxContent(props) {
211
213
  templateData={templateData}
212
214
  showTemplateName={showTemplateName}
213
215
  getDefaultTags={type}
216
+ onValidationFail={onValidationFail}
214
217
  />
215
218
  }
216
219
  {isCreateMPush &&
@@ -232,7 +235,8 @@ function SlideBoxContent(props) {
232
235
  cap={cap}
233
236
  onResetStep={onResetStep}
234
237
  showTemplateName={showTemplateName}
235
- query={query}/>
238
+ query={query}
239
+ onValidationFail={onValidationFail}/>
236
240
  }
237
241
  </CreativesWrapper>
238
242
  );