@capillarytech/creatives-library 0.0.4 → 0.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.
- package/components/CardGrid/index.js +11 -3
- package/components/Ckeditor/index.js +20 -17
- package/components/CustomPopOver/index.js +4 -1
- package/components/EmailPreview/index.js +1 -1
- package/components/FormBuilder/index.js +225 -71
- package/components/TemplatePreview/index.js +3 -0
- 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 +595 -158
- package/containers/Email/messages.js +12 -0
- package/containers/Email/reducer.js +4 -1
- package/containers/Email/selectors.js +7 -1
- package/containers/Sms/Create/index.js +3 -3
- package/containers/Templates/actions.js +13 -0
- package/containers/Templates/constants.js +2 -1
- package/containers/Templates/index.js +57 -57
- package/containers/Templates/messages.js +1 -1
- package/containers/Templates/reducer.js +9 -2
- package/initialState.js +6 -0
- package/package.json +2 -1
- package/reducers.js +4 -0
- package/routes.js +24 -2
- 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
|
};
|
|
@@ -117,7 +117,7 @@ export class Create extends React.Component { // eslint-disable-line react/prefe
|
|
|
117
117
|
|
|
118
118
|
componentWillReceiveProps(nextProps) {
|
|
119
119
|
console.log('recieved props ', nextProps, nextProps.Create, this.props.Create);
|
|
120
|
-
if (nextProps.location.query.module === '
|
|
120
|
+
if (nextProps.location.query.module === 'library' && nextProps.isGetFormData) {
|
|
121
121
|
nextProps.getFormSubscriptionData(this.getFormData());
|
|
122
122
|
}
|
|
123
123
|
if (nextProps.createResponse && nextProps.createResponse.templateId) {
|
|
@@ -141,7 +141,7 @@ export class Create extends React.Component { // eslint-disable-line react/prefe
|
|
|
141
141
|
if (nextProps.metaEntities && nextProps.metaEntities.layouts && nextProps.metaEntities.layouts.length > 0 && _.isEmpty(this.state.schema)) {
|
|
142
142
|
console.log('final schema is**', nextProps.metaEntities.layouts[0].definition);
|
|
143
143
|
this.injectEvents(nextProps.metaEntities.layouts[0].definition);
|
|
144
|
-
if (this.props.location.query.module !== '
|
|
144
|
+
if (this.props.location.query.module !== 'library') {
|
|
145
145
|
const query = {
|
|
146
146
|
layout: 'SMS',
|
|
147
147
|
type: 'TAG',
|
|
@@ -1397,7 +1397,7 @@ export class Create extends React.Component { // eslint-disable-line react/prefe
|
|
|
1397
1397
|
const schema = this.state.schema;
|
|
1398
1398
|
const spinning = this.state.loading || (this.props.Create && "createTemplateInProgress" in this.props.Create && this.props.Create.createTemplateInProgress);
|
|
1399
1399
|
let tags = this.props.metaEntities && this.props.metaEntities.tags ? this.props.metaEntities.tags.standard : [];
|
|
1400
|
-
if (this.props.location.query.type === 'embedded' && this.props.location.query.module === '
|
|
1400
|
+
if (this.props.location.query.type === 'embedded' && this.props.location.query.module === 'library') {
|
|
1401
1401
|
tags = this.props.supportedTags;
|
|
1402
1402
|
}
|
|
1403
1403
|
return (
|
|
@@ -93,3 +93,16 @@
|
|
|
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
|
+
}
|
|
103
|
+
|
|
104
|
+
export function resetTemplateStoreData() {
|
|
105
|
+
return {
|
|
106
|
+
type: types.CLEAR_TEMPLATE_STORE_DATA,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
@@ -41,4 +41,5 @@ 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";
|
|
45
|
+
export const CLEAR_TEMPLATE_STORE_DATA = "app/containers/Templates/CLEAR_TEMPLATE_STORE_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
|
|
|
@@ -292,6 +293,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
292
293
|
componentWillUnmount() {
|
|
293
294
|
console.log('removed listener templates');
|
|
294
295
|
window.removeEventListener("message", this.handleFrameTasks);
|
|
296
|
+
this.props.actions.resetTemplateStoreData();
|
|
295
297
|
}
|
|
296
298
|
|
|
297
299
|
onAccountSelect(value, option) {
|
|
@@ -309,7 +311,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
309
311
|
this.props.actions.setWeChatAccount(this.props.Templates.weCrmAccounts[_.findIndex(this.props.Templates.weCrmAccounts, { name: value})]);
|
|
310
312
|
params.accountId = this.props.Templates.weCrmAccounts[_.findIndex(this.props.Templates.weCrmAccounts, { name: value})].id;
|
|
311
313
|
}
|
|
312
|
-
console.log('getting templates 8');
|
|
313
314
|
this.getAllTemplates({params, resetPage: true});
|
|
314
315
|
});
|
|
315
316
|
}
|
|
@@ -325,7 +326,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
325
326
|
queryParams.page = this.state.page;
|
|
326
327
|
queryParams.perPage = this.state.perPageLimit;
|
|
327
328
|
const channel = this.state.channel;
|
|
328
|
-
console.log('getting templates 9');
|
|
329
329
|
this.props.actions.getAllTemplates(channel, queryParams);
|
|
330
330
|
} else if ((resetPage || (page === 1 && this.state.templatesCount === 0) || page <= (this.state.templatesCount / this.state.perPageLimit))) {
|
|
331
331
|
if (getNextPage) {
|
|
@@ -356,7 +356,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
356
356
|
queryParams.page = page;
|
|
357
357
|
queryParams.perPage = this.state.perPageLimit;
|
|
358
358
|
const channel = this.state.channel;
|
|
359
|
-
console.log('getting templates 9');
|
|
360
359
|
this.props.actions.getAllTemplates(channel, queryParams);
|
|
361
360
|
});
|
|
362
361
|
}
|
|
@@ -376,9 +375,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
376
375
|
const type = this.props.location.query.type;
|
|
377
376
|
const module = (type === 'embedded') ? this.props.location.query.module : 'default';
|
|
378
377
|
if (this.state.channel.toLowerCase() === 'email') {
|
|
378
|
+
const isLanguageSupport = this.props.location.query.isLanguageSupport || false;
|
|
379
379
|
this.props.router.push({
|
|
380
|
-
pathname: `/email/
|
|
381
|
-
query: type === 'embedded' ? {type: 'embedded', module} : {},
|
|
380
|
+
pathname: `/email/view`,
|
|
381
|
+
query: type === 'embedded' ? {type: 'embedded', module, isLanguageSupport} : {},
|
|
382
382
|
});
|
|
383
383
|
} else if (this.state.channel.toLowerCase() === 'sms') {
|
|
384
384
|
this.props.router.push({
|
|
@@ -443,14 +443,16 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
443
443
|
if (supportedZipFormats.indexOf(fileExtension.toLowerCase()) !== -1) {
|
|
444
444
|
console.log('Zip Format got');
|
|
445
445
|
this.props.actions.handleZipUpload(files[0]);
|
|
446
|
+
document.getElementById("filename").value = "";
|
|
446
447
|
} else if (fileExtension === 'html' || fileExtension === 'htm') {
|
|
447
448
|
console.log('html Format got');
|
|
448
449
|
const reader = new FileReader();
|
|
449
450
|
reader.onload = () => {
|
|
450
451
|
const text = reader.result;
|
|
451
452
|
this.props.actions.handleHtmlUpload(text);
|
|
453
|
+
document.getElementById("filename").value = "";
|
|
452
454
|
const type = this.props.location.query.type;
|
|
453
|
-
if (type === 'embedded' && module === "
|
|
455
|
+
if (type === 'embedded' && module === "library") {
|
|
454
456
|
this.props.createNew();
|
|
455
457
|
return;
|
|
456
458
|
}
|
|
@@ -635,7 +637,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
635
637
|
createTemplate(ev) {
|
|
636
638
|
const type = this.props.location.query.type;
|
|
637
639
|
const module = this.props.location.query.module ? this.props.location.query.module : 'default';
|
|
638
|
-
if (this.props.location.query.module === '
|
|
640
|
+
if (this.props.location.query.module === 'library') {
|
|
639
641
|
this.props.createNew();
|
|
640
642
|
} else if (ev.key && (ev.key.toLowerCase() === "text" || ev.key.toLowerCase() === "image")) {
|
|
641
643
|
this.props.router.push({
|
|
@@ -664,7 +666,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
664
666
|
if (this.state.channel.toLowerCase() === "mobilepush") {
|
|
665
667
|
params.accountId = this.props.Templates.selectedWeChatAccount.id;
|
|
666
668
|
}
|
|
667
|
-
console.log('getting templates 10');
|
|
668
669
|
this.getAllTemplates({params, resetPage: true});
|
|
669
670
|
});
|
|
670
671
|
}
|
|
@@ -682,7 +683,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
682
683
|
if (this.state.channel.toLowerCase() === "mobilepush") {
|
|
683
684
|
params.accountId = this.props.Templates.selectedWeChatAccount.id;
|
|
684
685
|
}
|
|
685
|
-
console.log('getting templates 11');
|
|
686
686
|
this.getAllTemplates({params, resetPage: true});
|
|
687
687
|
});
|
|
688
688
|
}
|
|
@@ -698,7 +698,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
698
698
|
if (this.state.channel.toLowerCase() === 'mobilepush' && data.toLowerCase() !== "all") {
|
|
699
699
|
params.mode = this.state.mode.toLowerCase();
|
|
700
700
|
}
|
|
701
|
-
console.log('getting templates 12');
|
|
702
701
|
this.getAllTemplates({params, resetPage: true});
|
|
703
702
|
});
|
|
704
703
|
};
|
|
@@ -738,6 +737,8 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
738
737
|
this.props.mobilepushActions.createTemplate(duplicateObj);
|
|
739
738
|
} else if (this.state.channel.toLowerCase() === "ebill") {
|
|
740
739
|
this.props.ebillActions.createTemplate(duplicateObj);
|
|
740
|
+
} else if (this.state.channel.toLowerCase() === "email") {
|
|
741
|
+
this.props.emailActions.createTemplate(duplicateObj);
|
|
741
742
|
}
|
|
742
743
|
}
|
|
743
744
|
|
|
@@ -765,12 +766,12 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
765
766
|
let getQuery = '';
|
|
766
767
|
console.log('Selected EDM Data ', data);
|
|
767
768
|
this.props.actions.setEdmTemplate(data);
|
|
768
|
-
if (
|
|
769
|
+
if (this.state.channel && this.state.channel.toLowerCase() === 'email') {
|
|
769
770
|
getQuery = (type === 'embedded') ? {type: 'embedded', module, isLanguageSupport, isEdmSupport} : {module, isLanguageSupport, isEdmSupport};
|
|
770
771
|
} else {
|
|
771
772
|
getQuery = (type === 'embedded') ? {type: 'embedded', module} : {module};
|
|
772
773
|
}
|
|
773
|
-
if (type === 'embedded' && module === "
|
|
774
|
+
if (type === 'embedded' && module === "library") {
|
|
774
775
|
this.props.createNew();
|
|
775
776
|
return;
|
|
776
777
|
}
|
|
@@ -785,7 +786,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
785
786
|
console.log('inside props****', this.props);
|
|
786
787
|
const type = this.props.location.query.type;
|
|
787
788
|
const module = this.props.location.query.module;
|
|
788
|
-
const isLanguageSupport = (this.props.location.query.isLanguageSupport) ? this.props.location.query.isLanguageSupport :
|
|
789
|
+
const isLanguageSupport = (this.props.location.query.isLanguageSupport) ? this.props.location.query.isLanguageSupport : false;
|
|
789
790
|
const isEdmSupport = (this.props.location.query.isEdmSupport) ? this.props.location.query.isEdmSupport : true;
|
|
790
791
|
let getQuery = "";
|
|
791
792
|
console.log('type**** ', type);
|
|
@@ -799,7 +800,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
799
800
|
if (this.state.channel.toLowerCase() === 'email') {
|
|
800
801
|
pathName = `/email/edit/${id}`;
|
|
801
802
|
}
|
|
802
|
-
if (
|
|
803
|
+
if (this.state.channel.toLowerCase() === 'email') {
|
|
803
804
|
getQuery = type === 'embedded' ? {type: 'embedded', module, isLanguageSupport, isEdmSupport} : {module};
|
|
804
805
|
} else {
|
|
805
806
|
getQuery = type === 'embedded' ? {type: 'embedded', module, account_id: this.props.location.query.account_id} : {module};
|
|
@@ -807,7 +808,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
807
808
|
if (this.state.channel.toLowerCase() === 'ebill') {
|
|
808
809
|
pathName = `/ebill/edit/${id}`;
|
|
809
810
|
}
|
|
810
|
-
if (module && module === '
|
|
811
|
+
if (module && module === 'library') {
|
|
811
812
|
this.props.onSelectTemplate(id);
|
|
812
813
|
} else {
|
|
813
814
|
if (this.state.channel.toLowerCase() === 'ebill') {
|
|
@@ -923,7 +924,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
923
924
|
data.map( (template) => {
|
|
924
925
|
// console.log("Templates ", template._id, " Data ", template);
|
|
925
926
|
const temp = {};
|
|
926
|
-
console.log('template ', template);
|
|
927
|
+
// console.log('template ', template);
|
|
927
928
|
const updateDateTime = (moment().format('DD-MM-YYYY') === moment(template.updatedAt).format('DD-MM-YYYY')) ? moment(template.updatedAt).format('hh:mma') : moment(template.updatedAt).format('DD MMM YYYY');
|
|
928
929
|
let content = '';
|
|
929
930
|
temp.id = template._id;
|
|
@@ -932,32 +933,32 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
932
933
|
temp.content = (
|
|
933
934
|
<div
|
|
934
935
|
className="sms-template-content">
|
|
935
|
-
<div className={`sms-text ${this.state.
|
|
936
|
+
<div className={`sms-text ${this.state.hoveredItem === template._id ? 'sms-text-blurred' : ''}`}>
|
|
936
937
|
{content || ''}
|
|
937
938
|
</div>
|
|
938
|
-
{template._id === this.state.
|
|
939
|
-
{template._id === this.state.
|
|
939
|
+
{template._id === this.state.hoveredItem ? <CapButton onClick={(e) => this.handleEditClick(e, template._id)} className="edit-button" type="secondary">{type === 'embedded' ? this.props.intl.formatMessage(messages.selectButton) : this.props.intl.formatMessage(messages.editButton)}</CapButton> : ''}
|
|
940
|
+
{template._id === this.state.hoveredItem ? <CapButton onClick={() => this.handlePreviewClick(template)} className="preview-button" type="cancel">{this.props.intl.formatMessage(messages.previewButton)}</CapButton> : ''}
|
|
940
941
|
</div>);
|
|
941
942
|
} else if (this.state.channel.toLowerCase() === 'email') {
|
|
942
943
|
// console.log('Data Prepare');
|
|
943
944
|
temp.content = (
|
|
944
945
|
<div
|
|
945
946
|
className="sms-template-content">
|
|
946
|
-
<div className={`sms-text ${this.state.
|
|
947
|
+
<div className={`sms-text ${this.state.hoveredItem === template._id ? 'sms-text-blurred' : ''}`}>
|
|
947
948
|
|
|
948
949
|
</div>
|
|
949
|
-
{template._id === this.state.
|
|
950
|
-
{template._id === this.state.
|
|
950
|
+
{template._id === this.state.hoveredItem ? <CapButton onClick={(e) => this.handleEditClick(e, template._id)} className="edit-button" type="secondary">{type === 'embedded' ? this.props.intl.formatMessage(messages.selectButton) : this.props.intl.formatMessage(messages.editButton)}</CapButton> : ''}
|
|
951
|
+
{template._id === this.state.hoveredItem ? <CapButton onClick={() => this.handlePreviewClick(template)} className="preview-button" type="cancel">{this.props.intl.formatMessage(messages.previewButton)}</CapButton> : ''}
|
|
951
952
|
</div>);
|
|
952
953
|
} else if (this.state.channel.toLowerCase() === 'mobilepush') {
|
|
953
954
|
content = this.prepareMobilePushPreviewData(template.versions.base);
|
|
954
955
|
temp.content = (
|
|
955
956
|
<div>
|
|
956
|
-
<div className={`mobilepush-message ${this.state.
|
|
957
|
+
<div className={`mobilepush-message ${this.state.hoveredItem === template._id ? 'sms-text-blurred' : ''}`}>
|
|
957
958
|
{content || ''}
|
|
958
959
|
</div>
|
|
959
|
-
{template._id === this.state.
|
|
960
|
-
{template._id === this.state.
|
|
960
|
+
{template._id === this.state.hoveredItem ? <CapButton onClick={(e) => this.handleEditClick(e, template._id)} className="edit-button" type="secondary">{type === 'embedded' ? this.props.intl.formatMessage(messages.selectButton) : this.props.intl.formatMessage(messages.editButton)}</CapButton> : ''}
|
|
961
|
+
{template._id === this.state.hoveredItem ? <CapButton onClick={() => this.handlePreviewClick(template)} className="preview-button" type="cancel">{this.props.intl.formatMessage(messages.previewButton)}</CapButton> : ''}
|
|
961
962
|
</div>);
|
|
962
963
|
} else {
|
|
963
964
|
content = template && template.versions && template.versions.base ? template.versions.base['sms-editor'] : '';
|
|
@@ -969,9 +970,9 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
969
970
|
temp.content = (
|
|
970
971
|
<div
|
|
971
972
|
className="sms-template-content">
|
|
972
|
-
<div className={`sms-text ${this.state.
|
|
973
|
-
{template._id === this.state.
|
|
974
|
-
{template._id === this.state.
|
|
973
|
+
<div className={`sms-text ${this.state.hoveredItem === template._id ? 'sms-text-blurred' : ''}`}>{content || ''}</div>
|
|
974
|
+
{template._id === this.state.hoveredItem ? <CapButton onClick={(e) => this.handleEditClick(e, template._id)} className="edit-button" type="secondary">{type === 'embedded' ? this.props.intl.formatMessage(messages.selectButton) : this.props.intl.formatMessage(messages.editButton)}</CapButton> : ''}
|
|
975
|
+
{template._id === this.state.hoveredItem ? <CapButton onClick={() => this.handlePreviewClick(template)} className="preview-button" type="cancel">{this.props.intl.formatMessage(messages.previewButton)}</CapButton> : ''}
|
|
975
976
|
</div>
|
|
976
977
|
);
|
|
977
978
|
}
|
|
@@ -1270,6 +1271,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1270
1271
|
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
1272
|
}
|
|
1272
1273
|
|
|
1274
|
+
const templateList = this.populateTemplatesList(this.props.TemplatesList, true);
|
|
1273
1275
|
return (
|
|
1274
1276
|
<div>
|
|
1275
1277
|
<Spin
|
|
@@ -1297,31 +1299,25 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1297
1299
|
{ name: 'description', content: 'Description of Templates' },
|
|
1298
1300
|
]}
|
|
1299
1301
|
/>
|
|
1300
|
-
<Pagination onPageChange={() => { this.getAllTemplates({getNextPage: true}); }} paginationSelector="pagination-container">
|
|
1302
|
+
{templateList && templateList.length > 0 && <Pagination onPageChange={() => { this.getAllTemplates({getNextPage: true}); }} paginationSelector="pagination-container">
|
|
1301
1303
|
<CardGrid
|
|
1302
1304
|
className={this.state.channel.toLowerCase() === "mobilepush" ? "mobilepush-templates" : ""}
|
|
1303
|
-
listItem={
|
|
1305
|
+
listItem={templateList}
|
|
1304
1306
|
filterContent={filterContent}
|
|
1305
1307
|
onHoverItem={this.handleOnHoverItem}
|
|
1306
1308
|
onItemClick={this.handleOnItemClick}
|
|
1307
1309
|
enablePagination
|
|
1308
1310
|
>
|
|
1309
1311
|
</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'}}>
|
|
1312
|
+
</Pagination>}
|
|
1313
|
+
{(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
1314
|
<span style={{ fontFamily: 'open-sans', fontSize: '24px', color: '#B5B5B5'}}>{this.props.intl.formatMessage(messages.noAccountMessage)}</span>
|
|
1321
1315
|
</div>}
|
|
1322
1316
|
{(((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
1317
|
<span style={{ fontFamily: 'open-sans', fontSize: '24px', color: '#B5B5B5'}}>{this.props.intl.formatMessage(messages.noTemplatesMessage)}</span>
|
|
1324
|
-
</div>}
|
|
1318
|
+
</div>}
|
|
1319
|
+
</Row>
|
|
1320
|
+
<Row>
|
|
1325
1321
|
<PreviewSideBar
|
|
1326
1322
|
showPreview={this.state.previewOpen}
|
|
1327
1323
|
templateData={this.state.previewTemplate}
|
|
@@ -1366,6 +1362,7 @@ Templates.propTypes = {
|
|
|
1366
1362
|
mobilepushActions: PropTypes.object,
|
|
1367
1363
|
smsEditActions: PropTypes.object,
|
|
1368
1364
|
ebillActions: PropTypes.object,
|
|
1365
|
+
emailActions: PropTypes.object,
|
|
1369
1366
|
TemplatesList: PropTypes.array,
|
|
1370
1367
|
Templates: PropTypes.object,
|
|
1371
1368
|
route: PropTypes.object,
|
|
@@ -1384,8 +1381,9 @@ const mapStateToProps = createStructuredSelector({
|
|
|
1384
1381
|
TemplatesList: makeSelectTemplatesResponse(),
|
|
1385
1382
|
Create: makeSelectCreateSms(),
|
|
1386
1383
|
CreateMobilePush: makeSelectCreateMobilePush(),
|
|
1387
|
-
|
|
1384
|
+
CreateEbill: makeSelectCreateEbill(),
|
|
1388
1385
|
Edit: makeSelectEdit(),
|
|
1386
|
+
EmailCreate: makeSelectCreateEmail(),
|
|
1389
1387
|
Global: makeSelectAuthenticated(),
|
|
1390
1388
|
});
|
|
1391
1389
|
|
|
@@ -1395,6 +1393,8 @@ function mapDispatchToProps(dispatch) {
|
|
|
1395
1393
|
smsActions: bindActionCreators(smsActions, dispatch),
|
|
1396
1394
|
mobilepushActions: bindActionCreators(mobilepushActions, dispatch),
|
|
1397
1395
|
smsEditActions: bindActionCreators(smsEditActions, dispatch),
|
|
1396
|
+
ebillActions: bindActionCreators(ebillActions, dispatch),
|
|
1397
|
+
emailActions: bindActionCreators(emailActions, dispatch),
|
|
1398
1398
|
globalActions: bindActionCreators(globalActions, dispatch),
|
|
1399
1399
|
};
|
|
1400
1400
|
}
|
|
@@ -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
|
|
@@ -124,6 +127,10 @@ function templatesReducer(state = initialState, action) {
|
|
|
124
127
|
return state
|
|
125
128
|
.set('getTemplateDetailsInProgress', false)
|
|
126
129
|
.set('templateDetails', fromJS({}));
|
|
130
|
+
case types.CLEAR_TEMPLATE_STORE_DATA:
|
|
131
|
+
return state
|
|
132
|
+
.set('templates', fromJS({}))
|
|
133
|
+
.set('weCRMtemplates', fromJS({}));
|
|
127
134
|
default:
|
|
128
135
|
return state;
|
|
129
136
|
}
|
package/initialState.js
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@capillarytech/creatives-library",
|
|
3
3
|
"author": "meharaj",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.6",
|
|
5
5
|
"description": "Capillary creatives ui",
|
|
6
6
|
"main": "./index.js",
|
|
7
7
|
"module": "./index.es.js",
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"express": "4.14.0",
|
|
26
26
|
"fixed-data-table": "^0.6.4",
|
|
27
27
|
"fontfaceobserver": "2.0.7",
|
|
28
|
+
"fs-extra": "^5.0.0",
|
|
28
29
|
"immutable": "3.8.1",
|
|
29
30
|
"intl": "1.2.5",
|
|
30
31
|
"invariant": "2.2.2",
|
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
|
});
|
|
@@ -213,7 +215,7 @@ export default function createRoutes(store) {
|
|
|
213
215
|
},
|
|
214
216
|
{
|
|
215
217
|
path: '/assets',
|
|
216
|
-
name: '
|
|
218
|
+
name: 'GALLERY',
|
|
217
219
|
getComponent(nextState, cb) {
|
|
218
220
|
const importModules = Promise.all([
|
|
219
221
|
import('containers/Assets/Gallery/reducer'),
|
|
@@ -294,8 +296,28 @@ 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
|
-
name: '
|
|
320
|
+
name: 'EmailEdit',
|
|
299
321
|
getComponent(nextState, cb) {
|
|
300
322
|
const importModules = Promise.all([
|
|
301
323
|
import('containers/Email/reducer'),
|