@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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capillarytech/creatives-library",
3
3
  "author": "meharaj",
4
- "version": "8.0.78",
4
+ "version": "8.0.80-alpha.0",
5
5
  "description": "Capillary creatives ui",
6
6
  "main": "./index.js",
7
7
  "module": "./index.es.js",
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 = ({file, assetType, fileParams, mode, wechatParams, whatsappParams}) => {
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
- return request(url, getAPICallObject('GET'));
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
- return request(url, getAPICallObject('GET'));
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
- "response": undefined,
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 {transformEmailTemplates, storeS3FileSizeDetails, CREATIVES_S3_ASSET_FILESIZES} from '../../utils/cdnTransformation';
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
- let id = _.get(this.props, 'Email.templateDetails._id', '') || _.get(this.props, 'Templates.BEETemplate._id', '');
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._id', '');
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;