@capillarytech/creatives-library 0.0.2 → 0.0.3

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 (33) hide show
  1. package/components/CapTagList/index.js +2 -2
  2. package/components/CapTagList/messages.js +4 -0
  3. package/components/CardGrid/index.js +2 -2
  4. package/components/Ckeditor/index.js +3 -1
  5. package/components/Edmeditor/index.js +1 -1
  6. package/components/FormBuilder/index.js +143 -38
  7. package/containers/Ebill/index.js +1 -1
  8. package/containers/Ebill/reducer.js +5 -2
  9. package/containers/Ebill/sagas.js +6 -2
  10. package/containers/Email/_email.scss +9 -0
  11. package/containers/Email/index.js +643 -602
  12. package/containers/Email/reducer.js +5 -2
  13. package/containers/Email/sagas.js +6 -2
  14. package/containers/MobilePush/Create/index.js +23 -1
  15. package/containers/MobilePush/Create/messages.js +1 -1
  16. package/containers/MobilePush/Create/reducer.js +6 -3
  17. package/containers/MobilePush/Create/sagas.js +6 -3
  18. package/containers/MobilePush/Edit/index.js +22 -1
  19. package/containers/MobilePush/Edit/messages.js +1 -1
  20. package/containers/MobilePush/Edit/reducer.js +6 -3
  21. package/containers/MobilePush/Edit/sagas.js +6 -3
  22. package/containers/Sms/Create/index.js +18 -11
  23. package/containers/Sms/Create/messages.js +4 -0
  24. package/containers/Sms/Create/reducer.js +6 -3
  25. package/containers/Sms/Create/sagas.js +7 -2
  26. package/containers/Sms/Edit/index.js +18 -11
  27. package/containers/Sms/Edit/messages.js +4 -0
  28. package/containers/Sms/Edit/reducer.js +6 -3
  29. package/containers/Sms/Edit/sagas.js +7 -2
  30. package/containers/Templates/index.js +85 -19
  31. package/containers/Templates/messages.js +28 -0
  32. package/containers/Templates/reducer.js +3 -2
  33. package/package.json +1 -1
@@ -26,7 +26,6 @@ import * as actions from './actions';
26
26
  import * as smsActions from '../Sms/Create/actions';
27
27
  import * as mobilepushActions from '../MobilePush/Create/actions';
28
28
  import * as smsEditActions from '../Sms/Edit/actions';
29
- import * as ebillActions from '../Ebill/actions';
30
29
  import CardGrid from '../../components/CardGrid';
31
30
  import PreviewSideBar from '../../components/PreviewSideBar';
32
31
  import './_templates.scss';
@@ -411,6 +410,26 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
411
410
  }
412
411
  };
413
412
 
413
+ handleBlankTemplateAction = (item) => {
414
+ const type = this.props.location.query.type;
415
+ const module = this.props.location.query.module ? this.props.location.query.module : 'default';
416
+ if (item === "uploadFile") {
417
+ document.getElementById('filename').click();
418
+ } else if (item === "editor") {
419
+ this.toggleEdmEmailTemplateSelection();
420
+ } else if (item === 'textTemplate') {
421
+ this.props.router.push({
422
+ pathname: `/mobilepush/create/text`,
423
+ query: type === 'embedded' ? {type: 'embedded', module} : {module},
424
+ });
425
+ } else if (item === 'imageTemplate') {
426
+ this.props.router.push({
427
+ pathname: `/mobilepush/create/image`,
428
+ query: type === 'embedded' ? {type: 'embedded', module} : {module},
429
+ });
430
+ }
431
+ }
432
+
414
433
  handleFileUpload = (e, {files}) => {
415
434
  if (files.length === 0) {
416
435
  return;
@@ -431,6 +450,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
431
450
  const text = reader.result;
432
451
  this.props.actions.handleHtmlUpload(text);
433
452
  const type = this.props.location.query.type;
453
+ if (type === 'embedded' && module === "subscription") {
454
+ this.props.createNew();
455
+ return;
456
+ }
434
457
  this.props.router.push({
435
458
  pathname: `/${this.props.route.name.toLowerCase()}/create`,
436
459
  query: type === 'embedded' ? {type: 'embedded', module, isLanguageSupport, isEdmSupport} : {module},
@@ -438,8 +461,8 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
438
461
  };
439
462
  reader.readAsText(files[0]);
440
463
  } else {
441
- alert('Invalid file type added! Please Give a proper zip file');
442
- console.log('Invalid file type added! Please Give a proper zip file');
464
+ const message = getMessageObject('error', this.props.intl.formatMessage(messages.invalidUploadFileError), true);
465
+ this.props.globalActions.addMessageToQueue(message);
443
466
  }
444
467
  };
445
468
 
@@ -747,6 +770,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
747
770
  } else {
748
771
  getQuery = (type === 'embedded') ? {type: 'embedded', module} : {module};
749
772
  }
773
+ if (type === 'embedded' && module === "subscription") {
774
+ this.props.createNew();
775
+ return;
776
+ }
750
777
  this.props.router.push({
751
778
  pathname: `/${this.state.channel.toLowerCase()}/create`,
752
779
  query: getQuery,
@@ -828,20 +855,53 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
828
855
  this.setState({showModal: false});
829
856
  }
830
857
 
831
- populateTemplatesList(data) {
858
+ populateTemplatesList = (data, blankTemplateRequired) => {
832
859
  if (!data) {
833
860
  return [];
834
861
  }
835
862
  const type = this.props.location.query.type;
836
863
  const items = [];
864
+ const channel = this.state.channel.toLowerCase();
837
865
 
838
- if (type === 'embedded' && this.state.channel !== 'wechat' && this.state.channel.toLowerCase() !== "mobilepush") {
866
+ if (type === 'embedded' && channel !== 'wechat' && blankTemplateRequired) {
867
+ let content;
868
+ if (channel === 'sms') {
869
+ content = (<div className="sms-template-content" onClick={this.createTemplate}>
870
+ <div style={{textAlign: 'center', lineHeight: '260px'}} className="sms-text">{this.props.intl.formatMessage(messages.blankTemplate)}</div>
871
+ </div>);
872
+ } else if (channel === 'email') {
873
+ content = (<div className="sms-template-content">
874
+ <div style={{textAlign: 'center', lineHeight: '260px'}} className="sms-text">
875
+ <div>
876
+ <button type="button" className="ant-btn cap-button edit-button ant-btn-ghost" onClick={() => this.handleBlankTemplateAction('uploadFile')}><span>Upload File</span></button>
877
+ <button type="button" className="ant-btn cap-button preview-button ant-btn-danger" onClick={() => this.handleBlankTemplateAction('editor')}><span>Use Editor</span></button>
878
+ </div>
879
+ </div>
880
+ </div>);
881
+ } else if (channel === 'mobilepush') {
882
+ content = (<div className="sms-template-content">
883
+ <div style={{textAlign: 'center', lineHeight: '260px'}} className="sms-text">
884
+ <div>
885
+ <button
886
+ type="button"
887
+ className="ant-btn cap-button edit-button ant-btn-ghost"
888
+ onClick={() => this.handleBlankTemplateAction('textTemplate')}>
889
+ <span>{this.props.intl.formatMessage(messages.textTemplate)}</span>
890
+ </button>
891
+ <button
892
+ type="button"
893
+ className="ant-btn cap-button preview-button ant-btn-danger"
894
+ onClick={() => this.handleBlankTemplateAction('imageTemplate')}>
895
+ <span>{this.props.intl.formatMessage(messages.imageTemplate)}</span>
896
+ </button>
897
+ </div>
898
+ </div>
899
+ </div>);
900
+ }
839
901
  items.push(
840
902
  {
841
903
  id: 'blankTemplate',
842
- content: <div className="sms-template-content" onClick={this.createTemplate}>
843
- <div style={{textAlign: 'center', lineHeight: '260px'}} className="sms-text">{this.props.intl.formatMessage(messages.blankTemplate)}</div>
844
- </div>,
904
+ content,
845
905
  }
846
906
  );
847
907
  } /*else if (type === 'embedded' && this.state.channel.toLowerCase() === "mobilepush") {
@@ -996,13 +1056,13 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
996
1056
  onOk={this.handleOk}
997
1057
  onCancel={this.handleCancel}
998
1058
  footer={[
999
- <CapButton key="back" onClick={this.handleCancel}>Cancel</CapButton>,
1059
+ <CapButton key="back" onClick={this.handleCancel}>{this.props.intl.formatMessage(messages.cancelText)}</CapButton>,
1000
1060
  <CapButton key="submit" type="primary" id="delete-version" onClick={this.handleOk}>
1001
- Yes
1061
+ {this.props.intl.formatMessage(messages.yesText)}
1002
1062
  </CapButton>,
1003
1063
  ]}
1004
1064
  >
1005
- Are you sure you want to delete this Template?
1065
+ {this.props.intl.formatMessage(messages.templateDeleteConfirm)}
1006
1066
  </Modal>);
1007
1067
  return modal;
1008
1068
  };
@@ -1151,10 +1211,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1151
1211
  const createPushMenu = (
1152
1212
  <Menu onClick={this.createTemplate}>
1153
1213
  <MenuItem key="text">
1154
- Text
1214
+ {this.props.intl.formatMessage(messages.textTemplate)}
1155
1215
  </MenuItem>
1156
1216
  <MenuItem key="image">
1157
- Image
1217
+ {this.props.intl.formatMessage(messages.imageTemplate)}
1158
1218
  </MenuItem>
1159
1219
  </Menu>
1160
1220
  );
@@ -1194,7 +1254,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1194
1254
  const cmsTemplateSelectionContent = (
1195
1255
  <CardGrid
1196
1256
  className={""}
1197
- listItem={this.populateTemplatesList(this.props.Templates.cmsTemplates)}
1257
+ listItem={this.populateTemplatesList(this.props.Templates.cmsTemplates, false)}
1198
1258
  // filterContent={filterContent}
1199
1259
  onHoverItem={this.handleOnHoverItem}
1200
1260
  onItemClick={this.handleEdmDefaultTemplateSelection}
@@ -1240,22 +1300,28 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1240
1300
  <Pagination onPageChange={() => { this.getAllTemplates({getNextPage: true}); }} paginationSelector="pagination-container">
1241
1301
  <CardGrid
1242
1302
  className={this.state.channel.toLowerCase() === "mobilepush" ? "mobilepush-templates" : ""}
1243
- listItem={this.populateTemplatesList(this.props.TemplatesList)}
1303
+ listItem={this.populateTemplatesList(this.props.TemplatesList, true)}
1244
1304
  filterContent={filterContent}
1245
1305
  onHoverItem={this.handleOnHoverItem}
1246
1306
  onItemClick={this.handleOnItemClick}
1247
1307
  enablePagination
1248
1308
  >
1249
1309
  </CardGrid>
1310
+ {(this.state.selectedAccount === '' && _.isEmpty(this.props.Templates.selectedWeChatAccount)) && (this.state.channel.toLowerCase() === 'wechat' || this.state.channel.toLowerCase() === "mobilepush") && <div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh'}}>
1311
+ <span style={{ fontFamily: 'open-sans', fontSize: '24px', color: '#B5B5B5'}}>{this.props.intl.formatMessage(messages.noAccountMessage)}</span>
1312
+ </div>}
1313
+ {(((this.state.selectedAccount !== '' && !_.isEmpty(this.props.Templates.selectedWeChatAccount) && this.state.channel.toLowerCase() === 'wechat') || this.state.channel.toLowerCase() !== 'wechat') && _.isEmpty(this.props.TemplatesList)) && !this.props.Templates.getAllTemplatesInProgress && <div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh'}}>
1314
+ <span style={{ fontFamily: 'open-sans', fontSize: '24px', color: '#B5B5B5'}}>{this.props.intl.formatMessage(messages.noTemplatesMessage)}</span>
1315
+ </div>}
1250
1316
  </Pagination>
1251
1317
  </Row>
1252
1318
  <Row>
1253
- {(this.state.selectedAccount === '' && _.isEmpty(this.props.Templates.selectedWeChatAccount)) && (this.state.channel.toLowerCase() === 'wechat' || this.state.channel.toLowerCase() === "mobilepush") && <div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh'}}>
1319
+ {/* {(this.state.selectedAccount === '' && _.isEmpty(this.props.Templates.selectedWeChatAccount)) && (this.state.channel.toLowerCase() === 'wechat' || this.state.channel.toLowerCase() === "mobilepush") && <div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh'}}>
1254
1320
  <span style={{ fontFamily: 'open-sans', fontSize: '24px', color: '#B5B5B5'}}>{this.props.intl.formatMessage(messages.noAccountMessage)}</span>
1255
1321
  </div>}
1256
1322
  {(((this.state.selectedAccount !== '' && !_.isEmpty(this.props.Templates.selectedWeChatAccount) && this.state.channel.toLowerCase() === 'wechat') || this.state.channel.toLowerCase() !== 'wechat') && _.isEmpty(this.props.TemplatesList)) && !this.props.Templates.getAllTemplatesInProgress && <div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh'}}>
1257
1323
  <span style={{ fontFamily: 'open-sans', fontSize: '24px', color: '#B5B5B5'}}>{this.props.intl.formatMessage(messages.noTemplatesMessage)}</span>
1258
- </div>}
1324
+ </div>} */}
1259
1325
  <PreviewSideBar
1260
1326
  showPreview={this.state.previewOpen}
1261
1327
  templateData={this.state.previewTemplate}
@@ -1267,7 +1333,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1267
1333
  location={this.props.location}
1268
1334
  >
1269
1335
  </PreviewSideBar>
1270
- {(this.state.channel.toLowerCase() === 'ebill' || this.state.channel.toLowerCase() === 'email') && <EmailPreview
1336
+ {(this.state.channel.toLowerCase() === 'ebill' || this.state.channel.toLowerCase() === 'email') && htmlPreviewContent && <EmailPreview
1271
1337
  header={previewHeader}
1272
1338
  content={htmlPreviewContent}
1273
1339
  show={this.state.showHtmlPreview}
@@ -1278,7 +1344,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1278
1344
  updatedByName={commonUtil.getUserNameById(parseInt(this.state.previewTemplate.updatedBy, 10), commonUtil.getMergedUserList(this.props.Templates.userList))}
1279
1345
  />}
1280
1346
  <SlideBox
1281
- header={(<h3>Template Selection</h3>)}
1347
+ header={(<h3>{this.props.intl.formatMessage(messages.templateSelection)}</h3>)}
1282
1348
  width={60}
1283
1349
  content={cmsTemplateSelectionContent}
1284
1350
  show={this.state.showEdmEmailTemplates}
@@ -186,4 +186,32 @@ export default defineMessages({
186
186
  id: 'app.containers.Templates.preview',
187
187
  defaultMessage: 'Preview',
188
188
  },
189
+ invalidUploadFileError: {
190
+ id: 'app.containers.Templates.invalidUploadFileError',
191
+ defaultMessage: 'File cannot be uploaded. Please select another file with valid file format.',
192
+ },
193
+ templateDeleteConfirm: {
194
+ id: 'app.containers.Templates.templateDeleteConfirm',
195
+ defaultMessage: 'Are you sure you want to delete this Template?',
196
+ },
197
+ cancelText: {
198
+ id: 'app.containers.Templates.cancelText',
199
+ defaultMessage: 'Cancel',
200
+ },
201
+ yesText: {
202
+ id: 'app.containers.Templates.yesText',
203
+ defaultMessage: 'Yes',
204
+ },
205
+ templateSelection: {
206
+ id: 'app.containers.Templates.templateSelection',
207
+ defaultMessage: 'Template Selection',
208
+ },
209
+ textTemplate: {
210
+ id: 'app.containers.Templates.textTemplate',
211
+ defaultMessage: 'Text',
212
+ },
213
+ imageTemplate: {
214
+ id: 'app.containers.Templates.imageTemplate',
215
+ defaultMessage: 'Image',
216
+ },
189
217
  });
@@ -78,12 +78,13 @@ function templatesReducer(state = initialState, action) {
78
78
  .set('templates', fromJS([]));
79
79
  case types.SET_SELECTED_LAYOUT:
80
80
  return state
81
- .set('selectedEmailLayout', fromJS(action.selectedTemplate))
81
+ .set('selectedEmailLayout', action.selectedTemplate)
82
82
  .set('edmTemplate', fromJS({}));
83
83
  case types.SEND_ZIPPED_FILE_REQUEST:
84
84
  return state
85
85
  .set('sendingFile', true)
86
- .set('errorSendingFile', false);
86
+ .set('errorSendingFile', false)
87
+ .set('selectedEmailLayout', "");
87
88
  case types.SEND_ZIPPED_FILE_SUCCESS:
88
89
  return state
89
90
  .set('sendingFile', false)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capillarytech/creatives-library",
3
3
  "author": "meharaj",
4
- "version": "0.0.2",
4
+ "version": "0.0.3",
5
5
  "description": "Capillary creatives ui",
6
6
  "main": "./index.js",
7
7
  "module": "./index.es.js",