@capillarytech/creatives-library 0.0.4 → 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.
- package/components/CardGrid/index.js +2 -2
- package/components/Ckeditor/index.js +20 -17
- package/components/CustomPopOver/index.js +4 -1
- package/components/FormBuilder/index.js +117 -44
- package/components/Toastr/index.js +1 -1
- package/containers/Cap/sagas.js +14 -1
- package/containers/Ebill/reducer.js +4 -1
- package/containers/Ebill/selectors.js +1 -1
- package/containers/Email/index.js +573 -158
- package/containers/Email/messages.js +12 -0
- package/containers/Email/reducer.js +4 -1
- package/containers/Email/selectors.js +7 -1
- package/containers/Templates/actions.js +7 -0
- package/containers/Templates/constants.js +1 -1
- package/containers/Templates/index.js +42 -45
- package/containers/Templates/messages.js +1 -1
- package/containers/Templates/reducer.js +5 -2
- package/initialState.js +6 -0
- package/package.json +1 -1
- package/reducers.js +4 -0
- package/routes.js +22 -0
- package/translations/en.json +17 -1
- package/translations/zh.json +16 -0
|
@@ -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
|
-
|
|
29
|
+
makeSelectEmail,
|
|
30
|
+
makeSelectCreateResponse,
|
|
25
31
|
};
|
|
@@ -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
|
-
|
|
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)
|
|
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)
|
|
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.
|
|
235
|
-
const message = getMessageObject('success', this.props.intl.formatMessage(messages.templateDuplicateSuccess)
|
|
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.
|
|
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/
|
|
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 === "
|
|
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 === '
|
|
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 === "
|
|
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 :
|
|
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 (
|
|
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 === '
|
|
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={
|
|
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
|
-
|
|
1311
|
-
|
|
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
|
-
|
|
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: "
|
|
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
package/package.json
CHANGED
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) {
|
package/translations/en.json
CHANGED
|
@@ -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": "
|
|
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",
|