@capillarytech/creatives-library 0.0.3 → 0.0.5

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.
@@ -218,4 +218,16 @@ export default defineMessages({
218
218
  id: 'app.containers.Email.deleteVersionConfirm',
219
219
  defaultMessage: 'Do you really want to delete this version?',
220
220
  },
221
+ uploadingImage: {
222
+ id: 'app.containers.Email.uploadingImage',
223
+ defaultMessage: 'Uploading Image...',
224
+ },
225
+ uploadSizeError: {
226
+ id: 'app.containers.Email.uploadSizeError',
227
+ defaultMessage: 'File Size Too large to upload. Please upload file upto 5 MB',
228
+ },
229
+ assetUploadFailed: {
230
+ id: 'app.containers.Email.assetUploadFailed',
231
+ defaultMessage: 'Image uploaded failed',
232
+ },
221
233
  });
@@ -8,7 +8,10 @@ import { fromJS } from 'immutable';
8
8
  import * as types from './constants';
9
9
 
10
10
 
11
- const initialState = fromJS({});
11
+ const initialState = fromJS({
12
+ createTemplateInProgress: false,
13
+ createResponse: {},
14
+ });
12
15
 
13
16
  function emailReducer(state = initialState, action) {
14
17
  switch (action.type) {
@@ -19,7 +19,13 @@ const makeSelectEmail = () => createSelector(
19
19
  (substate) => substate.toJS()
20
20
  );
21
21
 
22
+ const makeSelectCreateResponse = () => createSelector(
23
+ selectEmailDomain(), (dimensionState) => dimensionState.get('createResponse')
24
+ );
25
+
26
+
22
27
  export default makeSelectEmail;
23
28
  export {
24
- selectEmailDomain,
29
+ makeSelectEmail,
30
+ makeSelectCreateResponse,
25
31
  };
@@ -93,3 +93,10 @@
93
93
  type: types.RESET_TEMPLATE_DATA,
94
94
  };
95
95
  }
96
+
97
+ export function resetUploadData() {
98
+ console.log('clearing upload data');
99
+ return {
100
+ type: types.RESET_UPLOAD_DATA,
101
+ };
102
+ }
@@ -41,4 +41,4 @@ export const SET_EDM_TEMPLATE = "app/containers/Templates/SET_EDM_TEMPLATE";
41
41
  export const RESET_ACCOUNT = "app/containers/Templates/RESET_ACCOUNT";
42
42
  export const RESET_TEMPLATE = "app/containers/Templates/RESET_TEMPLATE";
43
43
  export const RESET_TEMPLATE_DATA = "app/containers/Templates/RESET_TEMPLATE_DATA";
44
-
44
+ export const RESET_UPLOAD_DATA = "app/containers/Templates/RESET_UPLOAD_DATA";
@@ -17,7 +17,8 @@ import { CapInput, CapButton, CapPopover, CapSelect } from '@capillarytech/cap-r
17
17
  import { makeSelectTemplates, makeSelectTemplatesResponse } from './selectors';
18
18
  import { makeSelectCreate as makeSelectCreateSms} from '../Sms/Create/selectors';
19
19
  import { makeSelectCreate as makeSelectCreateMobilePush } from '../MobilePush/Create/selectors';
20
- // import { makeSelectEbill as makeSelectCreateEbill } from '../Ebill/selectors';
20
+ import { makeSelectEbill as makeSelectCreateEbill } from '../Ebill/selectors';
21
+ import { makeSelectEmail as makeSelectCreateEmail } from '../Email/selectors';
21
22
  import { makeSelectEdit } from '../Sms/Edit/selectors';
22
23
  import { UserIsAuthenticated } from '../../utils/authWrapper';
23
24
  import messages from './messages';
@@ -26,6 +27,8 @@ import * as actions from './actions';
26
27
  import * as smsActions from '../Sms/Create/actions';
27
28
  import * as mobilepushActions from '../MobilePush/Create/actions';
28
29
  import * as smsEditActions from '../Sms/Edit/actions';
30
+ import * as ebillActions from '../Ebill/actions';
31
+ import * as emailActions from '../Email/actions';
29
32
  import CardGrid from '../../components/CardGrid';
30
33
  import PreviewSideBar from '../../components/PreviewSideBar';
31
34
  import './_templates.scss';
@@ -113,7 +116,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
113
116
 
114
117
  componentDidMount() {
115
118
  if (this.state.channel.toLowerCase() === 'sms' || this.state.channel.toLowerCase() === 'email' || this.state.channel.toLowerCase() === 'ebill' || ((this.state.channel.toLowerCase() === 'wechat' || this.state.channel.toLowerCase() === 'mobilepush') && !_.isEmpty(this.props.Templates.selectedWeChatAccount))) {
116
- console.log('getting templates 1');
117
119
  const queryParams = {
118
120
  name: this.state.searchText,
119
121
  sortBy: this.state.sortBy,
@@ -125,7 +127,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
125
127
  queryParams.page = this.state.page;
126
128
  queryParams.perPage = this.state.perPageLimit;
127
129
  const channel = this.state.channel;
128
- console.log('getting templates 9');
129
130
  this.props.actions.getAllTemplates(channel, queryParams);
130
131
  //this.getAllTemplates({});
131
132
  // if (this.state.channel.toLowerCase() === "email") {
@@ -172,7 +173,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
172
173
  if (this.state.channel.toLowerCase() === "mobilepush" && !_.isEmpty(nextProps.Templates.selectedWeChatAccount)) {
173
174
  params.accountId = nextProps.Templates.selectedWeChatAccount.id;
174
175
  }
175
- console.log('getting templates 2');
176
176
  this.getAllTemplates({params}, true);
177
177
  }
178
178
  });
@@ -201,7 +201,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
201
201
  params.wecrmId = selectedAccount.configs.wecrm_app_id;
202
202
  params.wecrmToken = selectedAccount.configs.wecrm_token;
203
203
  nextProps.actions.setWeChatAccount(selectedAccount);
204
- console.log('getting templates 3');
205
204
  this.getAllTemplates({params});
206
205
  });
207
206
  } else if (this.state.channel.toLowerCase() === 'mobilepush' && nextProps.location.query.account_id) {
@@ -212,31 +211,34 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
212
211
  });
213
212
  this.props.actions.setWeChatAccount(selectedAccount);
214
213
  params.accountId = Number(nextProps.location.query.account_id);
215
- console.log('getting templates 4');
216
214
  this.getAllTemplates({params});
217
215
  }
218
216
  }
219
217
  if (this.state.channel.toLowerCase() === "sms" && nextProps.Create && nextProps.Create.response && nextProps.Create.response.templateId && nextProps.Create.response.templateId !== '') {
220
- const message = getMessageObject('success', this.props.intl.formatMessage(messages.templateDuplicateSuccess), true);
218
+ const message = getMessageObject('success', `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`, true);
221
219
  this.props.globalActions.addMessageToQueue(message);
222
- console.log('getting templates 5');
223
220
  this.getAllTemplates({params});
224
221
  this.props.smsActions.clearCreateResponse();
225
222
  }
226
223
  if (this.state.channel.toLowerCase() === "mobilepush" && nextProps.CreateMobilePush && nextProps.CreateMobilePush.response && nextProps.CreateMobilePush.response.templateId && nextProps.CreateMobilePush.response.templateId !== '') {
227
- const message = getMessageObject('success', this.props.intl.formatMessage(messages.templateDuplicateSuccess), true);
224
+ const message = getMessageObject('success', `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`, true);
228
225
  this.props.globalActions.addMessageToQueue(message);
229
- console.log('getting templates 6');
230
226
  this.getAllTemplates({params});
231
227
  this.props.mobilepushActions.clearCreateResponse();
232
228
  }
233
229
 
234
- if (this.state.channel.toLowerCase() === "ebill" && nextProps.CreateEbill && nextProps.CreateEbill.response && nextProps.CreateEbill.response.templateId && nextProps.CreateEbill.response.templateId !== '') {
235
- const message = getMessageObject('success', this.props.intl.formatMessage(messages.templateDuplicateSuccess), true);
230
+ if (this.state.channel.toLowerCase() === "ebill" && nextProps.CreateEbill && nextProps.CreateEbill.createResponse && nextProps.CreateEbill.createResponse.templateId && nextProps.CreateEbill.createResponse.templateId !== '') {
231
+ const message = getMessageObject('success', `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`, true);
236
232
  this.props.globalActions.addMessageToQueue(message);
237
- console.log('getting templates 5');
238
233
  this.getAllTemplates({params});
239
- this.props.ebillActions.clearCreateResponse();
234
+ this.props.ebillActions.clearCRUDResponse();
235
+ }
236
+
237
+ if (this.state.channel.toLowerCase() === "email" && nextProps.EmailCreate && nextProps.EmailCreate.createResponse && nextProps.EmailCreate.createResponse.templateId && nextProps.EmailCreate.createResponse.templateId !== '') {
238
+ const message = getMessageObject('success', `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`, true);
239
+ this.props.globalActions.addMessageToQueue(message);
240
+ this.getAllTemplates({params});
241
+ this.props.emailActions.clearStoreValues();
240
242
  }
241
243
 
242
244
  if (nextProps.Create && this.props.Create && nextProps.Create.createTemplateError && !_.isEqual(nextProps.Create.createTemplateError, this.props.Create.createTemplateError)) {
@@ -259,7 +261,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
259
261
  console.log("delete");
260
262
  const message = getMessageObject('success', `${this.state.channel.toUpperCase()} ${this.props.intl.formatMessage(messages['Template deleted successfully'])}`, true);
261
263
  nextProps.globalActions.addMessageToQueue(message);
262
- console.log('getting templates 7');
263
264
  this.getAllTemplates({params, resetPage: true});
264
265
  }
265
266
 
@@ -309,7 +310,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
309
310
  this.props.actions.setWeChatAccount(this.props.Templates.weCrmAccounts[_.findIndex(this.props.Templates.weCrmAccounts, { name: value})]);
310
311
  params.accountId = this.props.Templates.weCrmAccounts[_.findIndex(this.props.Templates.weCrmAccounts, { name: value})].id;
311
312
  }
312
- console.log('getting templates 8');
313
313
  this.getAllTemplates({params, resetPage: true});
314
314
  });
315
315
  }
@@ -325,7 +325,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
325
325
  queryParams.page = this.state.page;
326
326
  queryParams.perPage = this.state.perPageLimit;
327
327
  const channel = this.state.channel;
328
- console.log('getting templates 9');
329
328
  this.props.actions.getAllTemplates(channel, queryParams);
330
329
  } else if ((resetPage || (page === 1 && this.state.templatesCount === 0) || page <= (this.state.templatesCount / this.state.perPageLimit))) {
331
330
  if (getNextPage) {
@@ -356,7 +355,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
356
355
  queryParams.page = page;
357
356
  queryParams.perPage = this.state.perPageLimit;
358
357
  const channel = this.state.channel;
359
- console.log('getting templates 9');
360
358
  this.props.actions.getAllTemplates(channel, queryParams);
361
359
  });
362
360
  }
@@ -376,9 +374,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
376
374
  const type = this.props.location.query.type;
377
375
  const module = (type === 'embedded') ? this.props.location.query.module : 'default';
378
376
  if (this.state.channel.toLowerCase() === 'email') {
377
+ const isLanguageSupport = this.props.location.query.isLanguageSupport || false;
379
378
  this.props.router.push({
380
- pathname: `/email/create`,
381
- query: type === 'embedded' ? {type: 'embedded', module} : {},
379
+ pathname: `/email/view`,
380
+ query: type === 'embedded' ? {type: 'embedded', module, isLanguageSupport} : {},
382
381
  });
383
382
  } else if (this.state.channel.toLowerCase() === 'sms') {
384
383
  this.props.router.push({
@@ -443,14 +442,16 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
443
442
  if (supportedZipFormats.indexOf(fileExtension.toLowerCase()) !== -1) {
444
443
  console.log('Zip Format got');
445
444
  this.props.actions.handleZipUpload(files[0]);
445
+ document.getElementById("filename").value = "";
446
446
  } else if (fileExtension === 'html' || fileExtension === 'htm') {
447
447
  console.log('html Format got');
448
448
  const reader = new FileReader();
449
449
  reader.onload = () => {
450
450
  const text = reader.result;
451
451
  this.props.actions.handleHtmlUpload(text);
452
+ document.getElementById("filename").value = "";
452
453
  const type = this.props.location.query.type;
453
- if (type === 'embedded' && module === "subscription") {
454
+ if (type === 'embedded' && module === "library") {
454
455
  this.props.createNew();
455
456
  return;
456
457
  }
@@ -635,7 +636,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
635
636
  createTemplate(ev) {
636
637
  const type = this.props.location.query.type;
637
638
  const module = this.props.location.query.module ? this.props.location.query.module : 'default';
638
- if (this.props.location.query.module === 'subscription') {
639
+ if (this.props.location.query.module === 'library') {
639
640
  this.props.createNew();
640
641
  } else if (ev.key && (ev.key.toLowerCase() === "text" || ev.key.toLowerCase() === "image")) {
641
642
  this.props.router.push({
@@ -664,7 +665,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
664
665
  if (this.state.channel.toLowerCase() === "mobilepush") {
665
666
  params.accountId = this.props.Templates.selectedWeChatAccount.id;
666
667
  }
667
- console.log('getting templates 10');
668
668
  this.getAllTemplates({params, resetPage: true});
669
669
  });
670
670
  }
@@ -682,7 +682,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
682
682
  if (this.state.channel.toLowerCase() === "mobilepush") {
683
683
  params.accountId = this.props.Templates.selectedWeChatAccount.id;
684
684
  }
685
- console.log('getting templates 11');
686
685
  this.getAllTemplates({params, resetPage: true});
687
686
  });
688
687
  }
@@ -698,7 +697,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
698
697
  if (this.state.channel.toLowerCase() === 'mobilepush' && data.toLowerCase() !== "all") {
699
698
  params.mode = this.state.mode.toLowerCase();
700
699
  }
701
- console.log('getting templates 12');
702
700
  this.getAllTemplates({params, resetPage: true});
703
701
  });
704
702
  };
@@ -738,6 +736,8 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
738
736
  this.props.mobilepushActions.createTemplate(duplicateObj);
739
737
  } else if (this.state.channel.toLowerCase() === "ebill") {
740
738
  this.props.ebillActions.createTemplate(duplicateObj);
739
+ } else if (this.state.channel.toLowerCase() === "email") {
740
+ this.props.emailActions.createTemplate(duplicateObj);
741
741
  }
742
742
  }
743
743
 
@@ -770,7 +770,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
770
770
  } else {
771
771
  getQuery = (type === 'embedded') ? {type: 'embedded', module} : {module};
772
772
  }
773
- if (type === 'embedded' && module === "subscription") {
773
+ if (type === 'embedded' && module === "library") {
774
774
  this.props.createNew();
775
775
  return;
776
776
  }
@@ -785,7 +785,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
785
785
  console.log('inside props****', this.props);
786
786
  const type = this.props.location.query.type;
787
787
  const module = this.props.location.query.module;
788
- const isLanguageSupport = (this.props.location.query.isLanguageSupport) ? this.props.location.query.isLanguageSupport : true;
788
+ const isLanguageSupport = (this.props.location.query.isLanguageSupport) ? this.props.location.query.isLanguageSupport : false;
789
789
  const isEdmSupport = (this.props.location.query.isEdmSupport) ? this.props.location.query.isEdmSupport : true;
790
790
  let getQuery = "";
791
791
  console.log('type**** ', type);
@@ -799,7 +799,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
799
799
  if (this.state.channel.toLowerCase() === 'email') {
800
800
  pathName = `/email/edit/${id}`;
801
801
  }
802
- if (type && type.toLowerCase() === 'email') {
802
+ if (this.state.channel.toLowerCase() === 'email') {
803
803
  getQuery = type === 'embedded' ? {type: 'embedded', module, isLanguageSupport, isEdmSupport} : {module};
804
804
  } else {
805
805
  getQuery = type === 'embedded' ? {type: 'embedded', module, account_id: this.props.location.query.account_id} : {module};
@@ -807,7 +807,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
807
807
  if (this.state.channel.toLowerCase() === 'ebill') {
808
808
  pathName = `/ebill/edit/${id}`;
809
809
  }
810
- if (module && module === 'subscription') {
810
+ if (module && module === 'library') {
811
811
  this.props.onSelectTemplate(id);
812
812
  } else {
813
813
  if (this.state.channel.toLowerCase() === 'ebill') {
@@ -1270,6 +1270,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1270
1270
  htmlPreviewContent = this.state.previewTemplate && this.state.previewTemplate.versions && this.state.previewTemplate.versions.base && this.state.previewTemplate.versions.base[this.props.Global.currentOrgDetails.basic_details.base_language ? this.props.Global.currentOrgDetails.basic_details.base_language : 'en']['template-content'];
1271
1271
  }
1272
1272
 
1273
+ const templateList = this.populateTemplatesList(this.props.TemplatesList, true);
1273
1274
  return (
1274
1275
  <div>
1275
1276
  <Spin
@@ -1297,31 +1298,25 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1297
1298
  { name: 'description', content: 'Description of Templates' },
1298
1299
  ]}
1299
1300
  />
1300
- <Pagination onPageChange={() => { this.getAllTemplates({getNextPage: true}); }} paginationSelector="pagination-container">
1301
+ {templateList && templateList.length > 0 && <Pagination onPageChange={() => { this.getAllTemplates({getNextPage: true}); }} paginationSelector="pagination-container">
1301
1302
  <CardGrid
1302
1303
  className={this.state.channel.toLowerCase() === "mobilepush" ? "mobilepush-templates" : ""}
1303
- listItem={this.populateTemplatesList(this.props.TemplatesList, true)}
1304
+ listItem={templateList}
1304
1305
  filterContent={filterContent}
1305
1306
  onHoverItem={this.handleOnHoverItem}
1306
1307
  onItemClick={this.handleOnItemClick}
1307
1308
  enablePagination
1308
1309
  >
1309
1310
  </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>}
1316
- </Pagination>
1317
- </Row>
1318
- <Row>
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'}}>
1311
+ </Pagination>}
1312
+ {(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'}}>
1320
1313
  <span style={{ fontFamily: 'open-sans', fontSize: '24px', color: '#B5B5B5'}}>{this.props.intl.formatMessage(messages.noAccountMessage)}</span>
1321
1314
  </div>}
1322
1315
  {(((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'}}>
1323
1316
  <span style={{ fontFamily: 'open-sans', fontSize: '24px', color: '#B5B5B5'}}>{this.props.intl.formatMessage(messages.noTemplatesMessage)}</span>
1324
- </div>} */}
1317
+ </div>}
1318
+ </Row>
1319
+ <Row>
1325
1320
  <PreviewSideBar
1326
1321
  showPreview={this.state.previewOpen}
1327
1322
  templateData={this.state.previewTemplate}
@@ -1366,6 +1361,7 @@ Templates.propTypes = {
1366
1361
  mobilepushActions: PropTypes.object,
1367
1362
  smsEditActions: PropTypes.object,
1368
1363
  ebillActions: PropTypes.object,
1364
+ emailActions: PropTypes.object,
1369
1365
  TemplatesList: PropTypes.array,
1370
1366
  Templates: PropTypes.object,
1371
1367
  route: PropTypes.object,
@@ -1375,8 +1371,6 @@ Templates.propTypes = {
1375
1371
  globalActions: PropTypes.object,
1376
1372
  intl: intlShape.isRequired,
1377
1373
  Global: PropTypes.object,
1378
- createNew: PropTypes.func,
1379
- onSelectTemplate: PropTypes.func,
1380
1374
  };
1381
1375
 
1382
1376
  const mapStateToProps = createStructuredSelector({
@@ -1384,8 +1378,9 @@ const mapStateToProps = createStructuredSelector({
1384
1378
  TemplatesList: makeSelectTemplatesResponse(),
1385
1379
  Create: makeSelectCreateSms(),
1386
1380
  CreateMobilePush: makeSelectCreateMobilePush(),
1387
- // CreateEbill: makeSelectCreateEbill(),
1381
+ CreateEbill: makeSelectCreateEbill(),
1388
1382
  Edit: makeSelectEdit(),
1383
+ EmailCreate: makeSelectCreateEmail(),
1389
1384
  Global: makeSelectAuthenticated(),
1390
1385
  });
1391
1386
 
@@ -1395,6 +1390,8 @@ function mapDispatchToProps(dispatch) {
1395
1390
  smsActions: bindActionCreators(smsActions, dispatch),
1396
1391
  mobilepushActions: bindActionCreators(mobilepushActions, dispatch),
1397
1392
  smsEditActions: bindActionCreators(smsEditActions, dispatch),
1393
+ ebillActions: bindActionCreators(ebillActions, dispatch),
1394
+ emailActions: bindActionCreators(emailActions, dispatch),
1398
1395
  globalActions: bindActionCreators(globalActions, dispatch),
1399
1396
  };
1400
1397
  }
@@ -132,7 +132,7 @@ export default defineMessages({
132
132
  },
133
133
  templateDuplicateSuccess: {
134
134
  id: 'app.containers.Templates.templateDuplicateSuccess',
135
- defaultMessage: "SMS Template Duplicated Successfully",
135
+ defaultMessage: "Template Duplicated Successfully",
136
136
  },
137
137
  templateDeleteSuccess: {
138
138
  id: 'app.containers.Templates.templateDeleteSuccess',
@@ -78,8 +78,11 @@ function templatesReducer(state = initialState, action) {
78
78
  .set('templates', fromJS([]));
79
79
  case types.SET_SELECTED_LAYOUT:
80
80
  return state
81
- .set('selectedEmailLayout', action.selectedTemplate)
81
+ .set('selectedEmailLayout', fromJS(action.selectedTemplate))
82
82
  .set('edmTemplate', fromJS({}));
83
+ case types.RESET_UPLOAD_DATA:
84
+ return state
85
+ .set('selectedEmailLayout', "");
83
86
  case types.SEND_ZIPPED_FILE_REQUEST:
84
87
  return state
85
88
  .set('sendingFile', true)
@@ -88,7 +91,7 @@ function templatesReducer(state = initialState, action) {
88
91
  case types.SEND_ZIPPED_FILE_SUCCESS:
89
92
  return state
90
93
  .set('sendingFile', false)
91
- .set('selectedEmailLayout', action.selectedTemplate)
94
+ .set('selectedEmailLayout', fromJS(action.selectedTemplate))
92
95
  .set('edmTemplate', fromJS({}));
93
96
  case types.SEND_ZIPPED_FILE_FAILURE:
94
97
  return state
package/initialState.js CHANGED
@@ -28,5 +28,11 @@ export default {
28
28
  },
29
29
  templates: {
30
30
 
31
+ },
32
+ email: {
33
+
34
+ },
35
+ ebill: {
36
+
31
37
  },
32
38
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capillarytech/creatives-library",
3
3
  "author": "meharaj",
4
- "version": "0.0.3",
4
+ "version": "0.0.5",
5
5
  "description": "Capillary creatives ui",
6
6
  "main": "./index.js",
7
7
  "module": "./index.es.js",
package/reducers.js CHANGED
@@ -14,6 +14,8 @@ import createSmsReducer from 'containers/Sms/Create/reducer';
14
14
  import editSmsReducer from 'containers/Sms/Edit/reducer';
15
15
  import templateReducer from 'containers/Templates/reducer';
16
16
  import tagsReducer from 'containers/TagList/reducer';
17
+ import emailReducer from 'containers/Email/reducer';
18
+ import ebillReducer from 'containers/Ebill/reducer';
17
19
 
18
20
  /*
19
21
  * routeReducer
@@ -56,6 +58,8 @@ export default function createReducer(asyncReducers) {
56
58
  edit: editSmsReducer,
57
59
  templates: templateReducer,
58
60
  tagList: tagsReducer,
61
+ email: emailReducer,
62
+ ebill: ebillReducer,
59
63
  ...asyncReducers,
60
64
  });
61
65
  }
package/routes.js CHANGED
@@ -8,6 +8,7 @@ import * as smsSagas from 'containers/Sms/Create/sagas';
8
8
  import * as smsEditSagas from 'containers/Sms/Edit/sagas';
9
9
  import * as mobilpushSagas from 'containers/MobilePush/Create/sagas';
10
10
  import * as ebillSagas from 'containers/Ebill/sagas';
11
+ import * as emailSagas from 'containers/Email/sagas';
11
12
  import * as templateSagas from 'containers/Templates/sagas';
12
13
  const errorLoading = (err) => {
13
14
  console.error('Dynamic page loading failed', err); // eslint-disable-line no-console
@@ -182,6 +183,7 @@ export default function createRoutes(store) {
182
183
  importModules.then(([reducer, sagas, component]) => {
183
184
  injectReducer('templates', reducer.default);
184
185
  injectSagas(sagas.default);
186
+ injectSagas(emailSagas.default);
185
187
  injectSagas(rootSaga.default);
186
188
  renderRoute(component);
187
189
  });
@@ -294,6 +296,26 @@ export default function createRoutes(store) {
294
296
  importModules.catch(errorLoading);
295
297
  },
296
298
  }, {
299
+ path: '/email/view',
300
+ name: 'EmailView',
301
+ getComponent(nextState, cb) {
302
+ const importModules = Promise.all([
303
+ import('containers/Email/reducer'),
304
+ import('containers/Email/sagas'),
305
+ import('containers/Email'),
306
+ ]);
307
+ const renderRoute = loadModule(cb);
308
+
309
+ importModules.then(([reducer, sagas, component]) => {
310
+ injectReducer('email', reducer.default);
311
+ injectSagas(sagas.default);
312
+ injectSagas(rootSaga.default);
313
+ injectSagas(templateSagas.default);
314
+ renderRoute(component);
315
+ });
316
+ importModules.catch(errorLoading);
317
+ },
318
+ }, {
297
319
  path: '/email/edit/:id',
298
320
  name: 'Email',
299
321
  getComponent(nextState, cb) {
@@ -2,11 +2,14 @@
2
2
  "app.components.BreadCrumbs.header": "This is the BreadCrumbs component !",
3
3
  "app.components.CapTagList.Cancel": "Cancel",
4
4
  "app.components.CapTagList.Ok": "Ok",
5
+ "app.components.CapTagList.dynamic_days_before_expiry": "Dynamic Days before Expiry",
5
6
  "app.components.CapTagList.numberOfDaysBeforeExpiry": "Number of days before expiry",
6
7
  "app.components.Ckeditor.header": "This is the Ckeditor component !",
7
8
  "app.components.CustomPopOver.header": "This is the CustomPopOver component !",
8
9
  "app.components.DateRange.header": "This is the DateRange component !",
9
10
  "app.components.Edmeditor.header": "This is the Edmeditor component !",
11
+ "app.components.EmailPreview.lastModified": "Last Modified On",
12
+ "app.components.EmailPreview.uploadedBy": "Last Modified By",
10
13
  "app.components.Footer.header": "This is the Footer component !",
11
14
  "app.components.FormBuilder.header": "This is the FormBuilder component !",
12
15
  "app.components.ImagePreview.loadingImage": "Loading Images !!!!",
@@ -61,6 +64,7 @@
61
64
  "app.containers.Create.saveButton": "Save",
62
65
  "app.containers.Create.saveTemplateLoader": "Saving Template...",
63
66
  "app.containers.Create.smsEditorPlaceholder": "Please input sms template content.",
67
+ "app.containers.Create.somethingWentWrong": "Something Went Wrong!!",
64
68
  "app.containers.Create.tagsErrorMessage": "Template content has unsupported/missing tags!",
65
69
  "app.containers.Create.tagsLabel": "Tags",
66
70
  "app.containers.Create.templateNamePlaceHolder": "Enter template name",
@@ -97,6 +101,7 @@
97
101
  "app.containers.Edit.saveButton": "Save",
98
102
  "app.containers.Edit.saveTemplateLoader": "Saving Template...",
99
103
  "app.containers.Edit.smsEditorPlaceholder": "Please input sms template content.",
104
+ "app.containers.Edit.somethingWentWrong": "Something Went Wrong!!",
100
105
  "app.containers.Edit.tagsErrorMessage": "Template content has unsupported/missing tags!",
101
106
  "app.containers.Edit.tagsLabel": "Tags",
102
107
  "app.containers.Edit.templateNamePlaceHolder": "Enter template name",
@@ -112,6 +117,7 @@
112
117
  "app.containers.Email.Tags": "Tags",
113
118
  "app.containers.Email.alphabetically": "Alphabetically",
114
119
  "app.containers.Email.alphabeticallyOption": "Alphabetically",
120
+ "app.containers.Email.assetUploadFailed": "Image uploaded failed",
115
121
  "app.containers.Email.blankTemplate": "Blank Template",
116
122
  "app.containers.Email.cancel": "Cancel",
117
123
  "app.containers.Email.createHeading": "Create Email Template",
@@ -152,8 +158,10 @@
152
158
  "app.containers.Email.templateNameNotEmpty": "Template name cannot be empty.",
153
159
  "app.containers.Email.templateNamePlaceholder": "Enter template name",
154
160
  "app.containers.Email.upload": "Upload Image",
161
+ "app.containers.Email.uploadSizeError": "File Size Too large to upload. Please upload file upto 5 MB",
155
162
  "app.containers.Email.uploadedAt": "Modified",
156
163
  "app.containers.Email.uploadedBy": "Uploaded By",
164
+ "app.containers.Email.uploadingImage": "Uploading Image...",
157
165
  "app.containers.Email.yes": "Yes",
158
166
  "app.containers.Login.header": "This is Login container change !",
159
167
  "app.containers.Login.invalidCredential": "Invalid Username or Password",
@@ -278,6 +286,7 @@
278
286
  "app.containers.Templates.alphabeticallyOption": "Alphabetically",
279
287
  "app.containers.Templates.blankTemplate": "Blank Template",
280
288
  "app.containers.Templates.campaigns": "Campaigns",
289
+ "app.containers.Templates.cancelText": "Cancel",
281
290
  "app.containers.Templates.createEmailActionButton": "Create Email",
282
291
  "app.containers.Templates.createSmsActionButton": "Create SMS",
283
292
  "app.containers.Templates.creatives": "Creatives",
@@ -292,12 +301,15 @@
292
301
  "app.containers.Templates.emailPreview": "Email Preview",
293
302
  "app.containers.Templates.gettingAllTemplates": "Getting all templates...",
294
303
  "app.containers.Templates.header": "This is Templates container !",
304
+ "app.containers.Templates.imageTemplate": "Image",
305
+ "app.containers.Templates.invalidUploadFileError": "File cannot be uploaded. Please select another file with valid file format.",
295
306
  "app.containers.Templates.mapTemplate": "Map Template",
296
307
  "app.containers.Templates.mobilepushHeader": "Mobile Push",
297
308
  "app.containers.Templates.mostRecentOption": "Most Recent",
298
309
  "app.containers.Templates.newTemplate": "New Template",
299
310
  "app.containers.Templates.noAccountMessage": "Please select an account to proceed",
300
311
  "app.containers.Templates.noTemplatesMessage": "No Templates Available",
312
+ "app.containers.Templates.preview": "Preview",
301
313
  "app.containers.Templates.previewButton": "Preview",
302
314
  "app.containers.Templates.searchText": "Search",
303
315
  "app.containers.Templates.selectAccount": "Select Account",
@@ -308,8 +320,11 @@
308
320
  "app.containers.Templates.smsHeader": "SMS",
309
321
  "app.containers.Templates.somethingWentWrong": "Something Went Wrong!!",
310
322
  "app.containers.Templates.sortBy": "Sort by",
323
+ "app.containers.Templates.templateDeleteConfirm": "Are you sure you want to delete this Template?",
311
324
  "app.containers.Templates.templateDeleteSuccess": "SMS Template Deleted Successfully",
312
- "app.containers.Templates.templateDuplicateSuccess": "SMS Template Duplicated Successfully",
325
+ "app.containers.Templates.templateDuplicateSuccess": "Template Duplicated Successfully",
326
+ "app.containers.Templates.templateSelection": "Template Selection",
327
+ "app.containers.Templates.textTemplate": "Text",
313
328
  "app.containers.Templates.unMapButton": "Unmap",
314
329
  "app.containers.Templates.uploadFile": "Upload File",
315
330
  "app.containers.Templates.uploadedAt": "Modified",
@@ -318,6 +333,7 @@
318
333
  "app.containers.Templates.useEditor": "Use Editor",
319
334
  "app.containers.Templates.wechatChannelTemplatesHeader": "WECHAT Templates",
320
335
  "app.containers.Templates.wechatHeader": "WECHAT",
336
+ "app.containers.Templates.yesText": "Yes",
321
337
  "app.containers.Templates.zipUploadFailed": "Failed to Upload zip file",
322
338
  "app.containers.Testv2.header": "This is Testv2 container !",
323
339
  "app.containers.WeChat.accountId": "Account Id",