@capillarytech/creatives-library 8.0.78 → 8.0.80-alpha.0
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.
|
@@ -1199,14 +1199,13 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
1199
1199
|
}
|
|
1200
1200
|
|
|
1201
1201
|
getValidationData = () => {
|
|
1202
|
-
|
|
1203
1202
|
const that = this;
|
|
1204
1203
|
const formData = _.cloneDeep(this.state.formData);
|
|
1205
1204
|
_.forEach(formData, (val, index) => {
|
|
1206
1205
|
if (!isNaN(index)) {
|
|
1207
1206
|
_.forEach(val.selectedLanguages, (language) => {
|
|
1208
|
-
|
|
1209
1207
|
if (val[language].is_drag_drop) {
|
|
1208
|
+
console.log('***getValidationData -1210', val[language].drag_drop_id, language);
|
|
1210
1209
|
that.props.actions.getCmsData('edm', val[language].drag_drop_id, language);
|
|
1211
1210
|
}
|
|
1212
1211
|
});
|
|
@@ -1938,6 +1937,7 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
1938
1937
|
}
|
|
1939
1938
|
});
|
|
1940
1939
|
} else if (this.state.mode === 'preview' || this.state.mode === 'switchEditor') {
|
|
1940
|
+
console.log('***HandleEdmSave -1940', this.state.formData[`${this.state.currentTab - 1}`][this.state.formData[`${this.state.currentTab - 1}`].activeTab].drag_drop_id);
|
|
1941
1941
|
this.props.actions.getCmsData('edm', this.state.formData[`${this.state.currentTab - 1}`][this.state.formData[`${this.state.currentTab - 1}`].activeTab].drag_drop_id);
|
|
1942
1942
|
if (this.state.mode === 'switchEditor') {
|
|
1943
1943
|
let schema = _.cloneDeep(this.state.schema);
|
|
@@ -55,9 +55,7 @@ export function* getAllAssets(assetType, queryParams) {
|
|
|
55
55
|
|
|
56
56
|
export function* getCmsSetting({cmsType, projectId, cmsMode, langId, isEdmSupport}) {
|
|
57
57
|
try {
|
|
58
|
-
|
|
59
58
|
const result = yield call(Api.getCmsTemplateSettings, cmsType, projectId, cmsMode, langId, isEdmSupport);
|
|
60
|
-
|
|
61
59
|
yield put({ type: types.GET_CMS_EDITOR_DETAILS_SUCCESS, settings: result.data.response.cmsDetails });
|
|
62
60
|
} catch (error) {
|
|
63
61
|
yield put({ type: types.GET_CMS_EDITOR_DETAILS_FAILURE, error });
|
|
@@ -67,7 +65,6 @@ export function* getCmsSetting({cmsType, projectId, cmsMode, langId, isEdmSuppor
|
|
|
67
65
|
export function* getCmsData({cmsType, projectId, langId}) {
|
|
68
66
|
try {
|
|
69
67
|
const result = yield call(Api.getCmsTemplateData, cmsType, projectId, langId);
|
|
70
|
-
|
|
71
68
|
yield put({ type: types.GET_CMS_EDITOR_DATA_SUCCESS, data: result.data.response.data, langId: result.data.response.langId });
|
|
72
69
|
} catch (error) {
|
|
73
70
|
yield put({ type: types.GET_CMS_EDITOR_DATA_FAILURE, error });
|
package/package.json
CHANGED
package/services/api.js
CHANGED
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
* Created by vivek on 3/5/17.
|
|
3
3
|
*/
|
|
4
4
|
import 'whatwg-fetch';
|
|
5
|
+
import { GA, decompressJsonObject } from '@capillarytech/cap-ui-utils';
|
|
6
|
+
import get from 'lodash/get';
|
|
5
7
|
import { loadItem, clearItem } from './localStorageApi';
|
|
6
8
|
import config from '../config/app';
|
|
7
9
|
import pathConfig from '../config/path';
|
|
8
10
|
import getSchema from './getSchema';
|
|
9
11
|
import * as API from '../utils/ApiCaller';
|
|
10
|
-
import { GA, decompressJsonObject } from '@capillarytech/cap-ui-utils';
|
|
11
12
|
import { addBaseToTemplate } from '../utils/commonUtils';
|
|
12
13
|
import { EMAIL, SMS } from '../v2Containers/CreativesContainer/constants';
|
|
13
14
|
let API_ENDPOINT = config.development.api_endpoint;
|
|
@@ -300,15 +301,17 @@ export const getAllAssets = ({assetType, queryParams = {}}) => {
|
|
|
300
301
|
});
|
|
301
302
|
// const url = `https://nightly.capillary.in/arya/api/v1/creatives/assets/${assetType}?query=${JSON.stringify(queryParams)}`;
|
|
302
303
|
return request(url, getAPICallObject('GET'));
|
|
303
|
-
}
|
|
304
|
-
|
|
304
|
+
};
|
|
305
|
+
|
|
305
306
|
export const deleteAssetById = ({assetId, assetType}) => {
|
|
306
307
|
const url = `${API_ENDPOINT}/assets/${assetId}/${assetType}`;
|
|
307
308
|
return request(url, getAPICallObject('DELETE'));
|
|
308
309
|
// return API.deleteResource(url);
|
|
309
310
|
};
|
|
310
311
|
|
|
311
|
-
export const uploadFile = ({
|
|
312
|
+
export const uploadFile = ({
|
|
313
|
+
file, assetType, fileParams, mode, wechatParams, whatsappParams,
|
|
314
|
+
}) => {
|
|
312
315
|
const data = new FormData();
|
|
313
316
|
let fileName = '';
|
|
314
317
|
try {
|
|
@@ -403,14 +406,20 @@ export const getCmsData = (cmsType, projectId, langId) => {
|
|
|
403
406
|
return API.get(url);
|
|
404
407
|
};
|
|
405
408
|
|
|
406
|
-
export const getEdmTemplates = () => {
|
|
409
|
+
export const getEdmTemplates = async () => {
|
|
407
410
|
const url = `${API_ENDPOINT}/templates/email/default`;
|
|
408
|
-
|
|
411
|
+
const compressedEdmTemplates = await request(url, getAPICallObject('GET'));
|
|
412
|
+
const response = get(compressedEdmTemplates, 'response', '');
|
|
413
|
+
const decompressedEdmTemplates = decompressJsonObject(response);
|
|
414
|
+
return { ...compressedEdmTemplates, response: addBaseToTemplate(decompressedEdmTemplates) };
|
|
409
415
|
};
|
|
410
416
|
|
|
411
|
-
export const getDefaultBeeTemplates = () => {
|
|
417
|
+
export const getDefaultBeeTemplates = async () => {
|
|
412
418
|
const url = `${API_ENDPOINT}/templates/v2/email/default`;
|
|
413
|
-
|
|
419
|
+
const compressedDefaultBeeTemplates = await request(url, getAPICallObject('GET'));
|
|
420
|
+
const response = get(compressedDefaultBeeTemplates, 'response', '');
|
|
421
|
+
const decompressedBeeTemplates = decompressJsonObject(response);
|
|
422
|
+
return { ...compressedDefaultBeeTemplates, response: addBaseToTemplate(decompressedBeeTemplates) };
|
|
414
423
|
};
|
|
415
424
|
|
|
416
425
|
// All about line
|
|
@@ -12,17 +12,22 @@ import {
|
|
|
12
12
|
askAiraForLiquid,
|
|
13
13
|
getLiquidTags,
|
|
14
14
|
fetchSchemaForEntity,
|
|
15
|
+
getDefaultBeeTemplates,
|
|
16
|
+
getEdmTemplates,
|
|
15
17
|
} from '../api';
|
|
16
18
|
import { mockData } from './mockData';
|
|
17
19
|
import getSchema from '../getSchema';
|
|
18
20
|
const sampleFile = require('../../assets/line.png');
|
|
19
21
|
|
|
20
22
|
let mockDecompressJsonObject;
|
|
23
|
+
let mockAddBaseToTemplate;
|
|
21
24
|
jest.mock('@capillarytech/cap-ui-utils', () => {
|
|
22
25
|
mockDecompressJsonObject = jest.fn();
|
|
26
|
+
mockAddBaseToTemplate = jest.fn();
|
|
23
27
|
return {
|
|
24
28
|
...jest.requireActual('@capillarytech/cap-ui-utils'),
|
|
25
29
|
decompressJsonObject: mockDecompressJsonObject,
|
|
30
|
+
addBaseToTemplate: mockAddBaseToTemplate,
|
|
26
31
|
};
|
|
27
32
|
});
|
|
28
33
|
|
|
@@ -136,7 +141,7 @@ describe('getAllTemplates -- Test with valid responses', () => {
|
|
|
136
141
|
global.fetch.mockReturnValue(Promise.resolve({json: () => Promise.resolve(),}));
|
|
137
142
|
mockDecompressJsonObject.mockReturnValue();
|
|
138
143
|
expect(await getAllTemplates({channel: 'email'})).toEqual({
|
|
139
|
-
|
|
144
|
+
response: undefined,
|
|
140
145
|
});
|
|
141
146
|
});
|
|
142
147
|
|
|
@@ -493,3 +498,114 @@ describe('fetchSchemaForEntity', () => {
|
|
|
493
498
|
expect(console.error).toHaveBeenCalledWith(mockError);
|
|
494
499
|
});
|
|
495
500
|
});
|
|
501
|
+
|
|
502
|
+
describe('Email Template APIs', () => {
|
|
503
|
+
beforeEach(() => {
|
|
504
|
+
global.fetch = jest.fn();
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
afterEach(() => {
|
|
508
|
+
jest.restoreAllMocks();
|
|
509
|
+
});
|
|
510
|
+
|
|
511
|
+
const sharedTests = (apiFunction, functionName) => {
|
|
512
|
+
it('should handle successful response', async () => {
|
|
513
|
+
const mockResponse = { response: 'compressed-data' };
|
|
514
|
+
const mockDecompressed = { template: 'decompressed-data' };
|
|
515
|
+
const mockWithBase = { template: 'data-with-base' };
|
|
516
|
+
|
|
517
|
+
global.fetch.mockReturnValue(Promise.resolve({
|
|
518
|
+
status: 200,
|
|
519
|
+
json: () => Promise.resolve(mockResponse),
|
|
520
|
+
}));
|
|
521
|
+
mockDecompressJsonObject.mockReturnValue(mockDecompressed);
|
|
522
|
+
mockAddBaseToTemplate.mockReturnValue(mockWithBase);
|
|
523
|
+
|
|
524
|
+
const result = await apiFunction();
|
|
525
|
+
expect(result).toEqual({
|
|
526
|
+
...mockResponse,
|
|
527
|
+
response: mockDecompressed,
|
|
528
|
+
});
|
|
529
|
+
});
|
|
530
|
+
|
|
531
|
+
it('should handle response property as empty object', async () => {
|
|
532
|
+
const mockResponse = { response: {} };
|
|
533
|
+
|
|
534
|
+
global.fetch.mockReturnValue(Promise.resolve({
|
|
535
|
+
status: 200,
|
|
536
|
+
json: () => Promise.resolve(mockResponse),
|
|
537
|
+
}));
|
|
538
|
+
mockDecompressJsonObject.mockReturnValue({});
|
|
539
|
+
mockAddBaseToTemplate.mockReturnValue({});
|
|
540
|
+
|
|
541
|
+
const result = await apiFunction();
|
|
542
|
+
expect(result).toEqual({
|
|
543
|
+
...mockResponse,
|
|
544
|
+
response: {},
|
|
545
|
+
});
|
|
546
|
+
});
|
|
547
|
+
|
|
548
|
+
it('should handle missing response property', async () => {
|
|
549
|
+
const mockResponse = {};
|
|
550
|
+
|
|
551
|
+
global.fetch.mockReturnValue(Promise.resolve({
|
|
552
|
+
status: 200,
|
|
553
|
+
json: () => Promise.resolve(mockResponse),
|
|
554
|
+
}));
|
|
555
|
+
mockDecompressJsonObject.mockReturnValue('');
|
|
556
|
+
mockAddBaseToTemplate.mockReturnValue('');
|
|
557
|
+
|
|
558
|
+
const result = await apiFunction();
|
|
559
|
+
expect(result).toEqual({
|
|
560
|
+
response: '',
|
|
561
|
+
});
|
|
562
|
+
});
|
|
563
|
+
|
|
564
|
+
it('should handle null response', async () => {
|
|
565
|
+
global.fetch.mockReturnValue(Promise.resolve({
|
|
566
|
+
json: () => Promise.resolve(null),
|
|
567
|
+
}));
|
|
568
|
+
mockDecompressJsonObject.mockReturnValue('');
|
|
569
|
+
mockAddBaseToTemplate.mockReturnValue('');
|
|
570
|
+
|
|
571
|
+
const result = await apiFunction();
|
|
572
|
+
expect(result).toEqual({
|
|
573
|
+
response: '',
|
|
574
|
+
});
|
|
575
|
+
});
|
|
576
|
+
|
|
577
|
+
it('should handle undefined response', async () => {
|
|
578
|
+
global.fetch.mockReturnValue(Promise.resolve({
|
|
579
|
+
json: () => Promise.resolve(undefined),
|
|
580
|
+
}));
|
|
581
|
+
mockDecompressJsonObject.mockReturnValue('');
|
|
582
|
+
mockAddBaseToTemplate.mockReturnValue('');
|
|
583
|
+
|
|
584
|
+
const result = await apiFunction();
|
|
585
|
+
expect(result).toEqual({
|
|
586
|
+
response: '',
|
|
587
|
+
});
|
|
588
|
+
});
|
|
589
|
+
|
|
590
|
+
it('should handle fetch failure', async () => {
|
|
591
|
+
global.fetch.mockRejectedValue(new Error('Network error'));
|
|
592
|
+
mockDecompressJsonObject.mockReturnValue(undefined);
|
|
593
|
+
mockAddBaseToTemplate.mockReturnValue(undefined);
|
|
594
|
+
console.error = jest.fn();
|
|
595
|
+
|
|
596
|
+
const result = await apiFunction();
|
|
597
|
+
|
|
598
|
+
expect(result).toEqual({
|
|
599
|
+
response: undefined,
|
|
600
|
+
});
|
|
601
|
+
});
|
|
602
|
+
};
|
|
603
|
+
|
|
604
|
+
describe('getEdmTemplates', () => {
|
|
605
|
+
sharedTests(getEdmTemplates, 'getEdmTemplates');
|
|
606
|
+
});
|
|
607
|
+
|
|
608
|
+
describe('getDefaultBeeTemplates', () => {
|
|
609
|
+
sharedTests(getDefaultBeeTemplates, 'getDefaultBeeTemplates');
|
|
610
|
+
});
|
|
611
|
+
});
|
|
@@ -31,7 +31,6 @@ export function* getTemplateDetails(id, channel) {
|
|
|
31
31
|
export function* getCmsData({cmsType, projectId}) {
|
|
32
32
|
try {
|
|
33
33
|
const result = yield call(Api.getCmsData, cmsType, projectId);
|
|
34
|
-
|
|
35
34
|
yield put({ type: types.GET_CMS_EDITOR_DATA_SUCCESS, data: decodeURIComponent(result.data.response.cmsData.htmlContent) });
|
|
36
35
|
} catch (error) {
|
|
37
36
|
yield put({ type: types.GET_CMS_EDITOR_DATA_FAILURE, error });
|
|
@@ -36,7 +36,7 @@ import { TRACK_CREATE_EMAIL, TRACK_EDIT_EMAIL, BEE_PLUGIN, CREATE, EDIT } from '
|
|
|
36
36
|
import { FONT_COLOR_05 } from '@capillarytech/cap-ui-library/styled/variables';
|
|
37
37
|
import { gtmPush } from '../../utils/gtmTrackers';
|
|
38
38
|
const {CapCustomCardList} = CapCustomCard;
|
|
39
|
-
import {
|
|
39
|
+
import {storeS3FileSizeDetails, CREATIVES_S3_ASSET_FILESIZES} from '../../utils/cdnTransformation';
|
|
40
40
|
import { CUSTOMER_BARCODE_TAG } from '../../containers/App/constants';
|
|
41
41
|
import injectReducer from '../../utils/injectReducer';
|
|
42
42
|
import v2EmailReducer from './reducer';
|
|
@@ -199,9 +199,9 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
199
199
|
this.setState({isDragDrop: true});
|
|
200
200
|
}
|
|
201
201
|
if (this.props.params.id) {
|
|
202
|
-
this.props.actions.getCmsSetting(BEE_PLUGIN, this.props.Templates.BEETemplate._id, 'open', undefined, isBEESupport, isBEEAppEnable);
|
|
202
|
+
this.props.actions.getCmsSetting(BEE_PLUGIN, _.get(this.props.Templates.BEETemplate, 'versions.base.drag_drop_id', this.props.Templates.BEETemplate?._id), 'open', undefined, isBEESupport, isBEEAppEnable);
|
|
203
203
|
} else if (this.props.location.query.module !== "library" || (this.props.location.query.module === "library" && !this.props.templateData)) {
|
|
204
|
-
this.props.actions.getCmsSetting(BEE_PLUGIN, this.props.Templates.BEETemplate._id, 'create', undefined, isBEESupport, isBEEAppEnable);
|
|
204
|
+
this.props.actions.getCmsSetting(BEE_PLUGIN, _.get(this.props.Templates.BEETemplate, 'versions.base.drag_drop_id', this.props.Templates.BEETemplate?._id), 'create', undefined, isBEESupport, isBEEAppEnable);
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
207
|
this.setState({ content: (this.props.Templates.selectedEmailLayout ? this.props.Templates.selectedEmailLayout : ''), formData});
|
|
@@ -497,6 +497,7 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
497
497
|
const isDragDrop = this.state.formData[`${this.state.currentTab - 1}`][this.state.formData[`${this.state.currentTab - 1}`].activeTab].is_drag_drop;
|
|
498
498
|
const isBEESupport = (this.props.location.query.isBEESupport !== "false") || false;
|
|
499
499
|
if (isDragDrop && isBEESupport && this.checkBeeEditorAllowedForLibrary()) {
|
|
500
|
+
console.log('***Handle EDM -500', this.edmEvent, JSON.parse(this.edmEvent.data));
|
|
500
501
|
const evtData = JSON.parse(this.edmEvent.data);
|
|
501
502
|
if (evtData.action === 'editBackground') {
|
|
502
503
|
this.edmEvent.source.postMessage(JSON.stringify({
|
|
@@ -511,6 +512,7 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
511
512
|
},
|
|
512
513
|
}), "*");
|
|
513
514
|
} else if (evtData.action === 'edit') {
|
|
515
|
+
console.log('***Handle EDM -515', this.edmEvent, JSON.parse(this.edmEvent.data));
|
|
514
516
|
this.edmEvent.source.postMessage(JSON.stringify({
|
|
515
517
|
_dynId: JSON.parse(this.edmEvent.data)._dynId,
|
|
516
518
|
action: "setProps",
|
|
@@ -748,7 +750,8 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
748
750
|
}
|
|
749
751
|
getValidationData = () => {
|
|
750
752
|
const that = this;
|
|
751
|
-
|
|
753
|
+
console.log('***getValidationData -753', this.props);
|
|
754
|
+
let id = _.get(this.props, 'Email.templateDetails._id', '') || _.get(this.props, 'Templates.BEETemplate.versions.base.drag_drop_id', '');
|
|
752
755
|
const formData = _.cloneDeep(this.state.formData);
|
|
753
756
|
if (!id) {
|
|
754
757
|
id = _.get(formData, `base[${formData.base.activeTab}].id`, '');
|
|
@@ -759,6 +762,7 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
759
762
|
if (!isNaN(index)) {
|
|
760
763
|
_.forEach(val.selectedLanguages, (language) => {
|
|
761
764
|
if (val[language].is_drag_drop && this.checkBeeEditorAllowedForLibrary()) {
|
|
765
|
+
console.log('***getValidationData -764', val[language].drag_drop_id, language, id);
|
|
762
766
|
that.props.actions.getCmsData(BEE_PLUGIN, id, language);
|
|
763
767
|
}
|
|
764
768
|
});
|
|
@@ -928,6 +932,7 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
928
932
|
// formData.base.activeTab = language;
|
|
929
933
|
// }
|
|
930
934
|
if (language && editData.versions.base[language].is_drag_drop && isBEEAppEnable) {
|
|
935
|
+
console.log('***getCmsSetting -934', editData, language);
|
|
931
936
|
this.props.actions.getCmsSetting(BEE_PLUGIN, editData._id, 'open', language, isBEESupport, isBEEAppEnable);
|
|
932
937
|
}
|
|
933
938
|
});
|
|
@@ -1405,7 +1410,8 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
1405
1410
|
}
|
|
1406
1411
|
});
|
|
1407
1412
|
} else if (this.state.mode === 'preview' || this.state.mode === 'switchEditor') {
|
|
1408
|
-
let id = _.get(this.props, 'Email.templateDetails._id', '') || _.get(this.props, 'Templates.BEETemplate.
|
|
1413
|
+
let id = _.get(this.props, 'Email.templateDetails._id', '') || _.get(this.props, 'Templates.BEETemplate.versions.base.drag_drop_id', '');
|
|
1414
|
+
console.log('***Handle EDM -864', id);
|
|
1409
1415
|
const formData = _.cloneDeep(this.state.formData);
|
|
1410
1416
|
if (!id) {
|
|
1411
1417
|
id = _.get(formData, `base[${formData.base.activeTab}].id`, '');
|
|
@@ -1520,6 +1526,7 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
1520
1526
|
storeS3FileSizeDetails(data?.metaInfo?.secure_file_path, data?.metaInfo?.file_size);
|
|
1521
1527
|
|
|
1522
1528
|
if (isDragDrop && isEdmSupport && this.checkBeeEditorAllowedForLibrary()) {
|
|
1529
|
+
console.log('***Handle EDM -1524', this.edmEvent, JSON.parse(this.edmEvent.data));
|
|
1523
1530
|
const evtData = JSON.parse(this.edmEvent.data);
|
|
1524
1531
|
if (evtData.action === 'editBackground') {
|
|
1525
1532
|
this.edmEvent.source.postMessage(JSON.stringify({
|
|
@@ -1534,6 +1541,7 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
1534
1541
|
},
|
|
1535
1542
|
}), "*");
|
|
1536
1543
|
} else if (evtData.action === 'edit') {
|
|
1544
|
+
console.log('***Handle EDM -1539', this.edmEvent, JSON.parse(this.edmEvent.data));
|
|
1537
1545
|
this.edmEvent.source.postMessage(JSON.stringify({
|
|
1538
1546
|
_dynId: JSON.parse(this.edmEvent.data)._dynId,
|
|
1539
1547
|
action: "setProps",
|
|
@@ -2502,7 +2510,9 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
2502
2510
|
};
|
|
2503
2511
|
handleEdmDefaultTemplateSelection = (isSelected, id) => {
|
|
2504
2512
|
if (isSelected) {
|
|
2513
|
+
console.log('***handleEdmDefaultTemplateSelection -2512', this.props.Templates.cmsTemplates);
|
|
2505
2514
|
const data = _.find(this.props.Templates.cmsTemplates, {_id: id});
|
|
2515
|
+
console.log('***handleEdmDefaultTemplateSelection -2513', data);
|
|
2506
2516
|
// const type = this.props.location.query.type;
|
|
2507
2517
|
// const module = this.props.location.query.module ? this.props.location.query.module : 'default';
|
|
2508
2518
|
// const isLanguageSupport = (this.props.location.query.isLanguageSupport) ? this.props.location.query.isLanguageSupport : true;
|