@capillarytech/creatives-library 7.8.0 → 7.9.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.
Files changed (63) hide show
  1. package/app.js +5 -1
  2. package/components/FormBuilder/index.js +2 -2
  3. package/containers/Email/index.js +8 -3
  4. package/containers/MobilePush/Create/index.js +2 -2
  5. package/containers/MobilePush/Edit/index.js +2 -2
  6. package/containers/WeChat/MapTemplates/index.js +15 -3
  7. package/package.json +1 -1
  8. package/services/api.js +20 -5
  9. package/translations/en.json +113 -2
  10. package/translations/zh.json +112 -1
  11. package/utils/gtmTrackers/gtmEvents/creativeDetails.js +6 -2
  12. package/utils/gtmTrackers/index.js +8 -4
  13. package/v2Components/CapImageUpload/index.js +14 -8
  14. package/v2Components/FormBuilder/index.js +10 -1
  15. package/v2Components/NavigationBar/index.js +63 -29
  16. package/v2Components/NavigationBar/messages.js +5 -0
  17. package/v2Components/TemplatePreview/assets/images/mobile.svg +24 -0
  18. package/v2Containers/App/constants.js +23 -3
  19. package/v2Containers/Cap/actions.js +2 -2
  20. package/v2Containers/Cap/constants.js +3 -2
  21. package/v2Containers/Cap/index.js +31 -18
  22. package/v2Containers/Cap/messages.js +8 -0
  23. package/v2Containers/Cap/sagas.js +18 -6
  24. package/v2Containers/CapFacebookPreview/constants.js +4 -0
  25. package/v2Containers/CapFacebookPreview/index.js +92 -67
  26. package/v2Containers/CapFacebookPreview/reducer.js +19 -10
  27. package/v2Containers/CreativesContainer/SlideBoxContent.js +2 -0
  28. package/v2Containers/CreativesContainer/index.js +80 -2
  29. package/v2Containers/Facebook/Advertisement/index.js +2 -2
  30. package/v2Containers/Facebook/Advertisement/index.scss +1 -1
  31. package/v2Containers/Facebook/index.js +15 -4
  32. package/v2Containers/Line/Container/Drawer/index.js +1 -1
  33. package/v2Containers/Line/Create/_lineCreate.scss +64 -0
  34. package/v2Containers/Line/Create/actions.js +94 -0
  35. package/v2Containers/Line/Create/constants.js +43 -0
  36. package/v2Containers/Line/Create/index.js +1132 -0
  37. package/v2Containers/Line/Create/initialSchema.js +378 -0
  38. package/v2Containers/Line/Create/messages.js +229 -0
  39. package/v2Containers/Line/Create/reducer.js +99 -0
  40. package/v2Containers/Line/Create/sagas.js +113 -0
  41. package/v2Containers/Line/Create/selectors.js +30 -0
  42. package/v2Containers/Line/CreateWrapper/constants.js +2 -0
  43. package/v2Containers/Line/CreateWrapper/index.js +117 -0
  44. package/v2Containers/Line/CreateWrapper/messages.js +55 -0
  45. package/v2Containers/Line/Edit/_lineEdit.scss +23 -0
  46. package/v2Containers/Line/Edit/actions.js +79 -0
  47. package/v2Containers/Line/Edit/constants.js +27 -0
  48. package/v2Containers/Line/Edit/index.js +1051 -0
  49. package/v2Containers/Line/Edit/messages.js +173 -0
  50. package/v2Containers/Line/Edit/reducer.js +83 -0
  51. package/v2Containers/Line/Edit/sagas.js +81 -0
  52. package/v2Containers/Line/Edit/selectors.js +29 -0
  53. package/v2Containers/Line/Edit/tests/actions.test.js +18 -0
  54. package/v2Containers/Line/Edit/tests/index.test.js +10 -0
  55. package/v2Containers/Line/Edit/tests/reducer.test.js +9 -0
  56. package/v2Containers/Line/Edit/tests/sagas.test.js +15 -0
  57. package/v2Containers/Line/Edit/tests/selectors.test.js +10 -0
  58. package/v2Containers/MobilePush/Edit/index.js +2 -2
  59. package/v2Containers/MobilepushWrapper/index.js +1 -1
  60. package/v2Containers/Templates/_templates.scss +4 -2
  61. package/v2Containers/Templates/index.js +5 -2
  62. package/v2Containers/TemplatesV2/index.js +11 -3
  63. package/v2Containers/WeChat/MapTemplates/index.js +12 -2
@@ -0,0 +1,173 @@
1
+ /*
2
+ * Edit Messages
3
+ *
4
+ * This contains all the text for the Edit component.
5
+ */
6
+ import { defineMessages } from 'react-intl';
7
+
8
+ export default defineMessages({
9
+ "imageUploadLabel": {
10
+ id: 'creatives.containersV2.Line.Edit.ImageUploadLabel',
11
+ defaultMessage: 'Upload image',
12
+ },
13
+ "Enter template name*": {
14
+ id: 'creatives.containersV2.Line.Edit.enterTemplateNameImportant',
15
+ defaultMessage: 'Enter template name*',
16
+ },
17
+ "Enter template name": {
18
+ id: 'creatives.containersV2.Line.Edit.enterTemplateName',
19
+ defaultMessage: 'Enter template name',
20
+ },
21
+ "Template name cannot be empty": {
22
+ id: 'creatives.containersV2.Line.Edit.templateCantEmpty',
23
+ defaultMessage: 'Template name cannot be empty',
24
+ },
25
+ "Discard Changes": {
26
+ id: 'creatives.containersV2.Line.Edit.discardChanges',
27
+ defaultMessage: 'Discard changes',
28
+ },
29
+ "Cancel": {
30
+ id: 'creatives.containersV2.Line.Edit.cancel',
31
+ defaultMessage: 'Cancel',
32
+ },
33
+ "Save": {
34
+ id: 'creatives.containersV2.Line.Edit.save',
35
+ defaultMessage: 'Save',
36
+ },
37
+ "Select Line Template": {
38
+ id: 'creatives.containersV2.Line.Edit.selectLineTemplate',
39
+ defaultMessage: 'Select line template',
40
+ },
41
+ "Template": {
42
+ id: 'creatives.containersV2.Line.Edit.template',
43
+ defaultMessage: 'Template',
44
+ },
45
+ "Title*": {
46
+ id: 'creatives.containersV2.Line.Edit.titleLabel',
47
+ defaultMessage: 'Title*',
48
+ },
49
+ "Title": {
50
+ id: 'creatives.containersV2.Line.Edit.title',
51
+ defaultMessage: 'Title',
52
+ },
53
+ "Please input message title name.": {
54
+ id: 'creatives.containersV2.Line.Edit.titleNameInvalid',
55
+ defaultMessage: 'Please enter the message title',
56
+ },
57
+ "Template message has unsupported/missing tags!": {
58
+ id: 'creatives.containersV2.Line.Edit.messageHasUnsupportedTag',
59
+ defaultMessage: 'Please check the message content for unsupported/missing tags',
60
+ },
61
+ "Tags": {
62
+ id: 'creatives.containersV2.Line.Edit.Tags',
63
+ defaultMessage: 'Tags',
64
+ },
65
+ "Message*": {
66
+ id: 'creatives.containersV2.Line.Edit.messageLabel',
67
+ defaultMessage: 'Message*',
68
+ },
69
+ "Message": {
70
+ id: 'creatives.containersV2.Line.Edit.message',
71
+ defaultMessage: 'Message',
72
+ },
73
+ "Please input mobile push template content.": {
74
+ id: 'creatives.containersV2.Line.Edit.inputLineTemplateContent',
75
+ defaultMessage: 'Please enter the message content',
76
+ },
77
+ "Template title has unsupported/missing tags.": {
78
+ id: 'creatives.containersV2.Line.Edit.titleHasUnsupportedTag',
79
+ defaultMessage: 'Please check the message content for unsupported/missing tags',
80
+ },
81
+ "Template name cannot be empty.": {
82
+ id: 'creatives.containersV2.Line.Edit.templateNameNotEmpty',
83
+ defaultMessage: 'Please provide a template name ',
84
+ },
85
+ "Message title has unsupported/missing tags!": {
86
+ id: 'creatives.containersV2.Line.Edit.messageTitleWithUnsupportedTag',
87
+ defaultMessage: 'Please check the message content for unsupported/missing tags',
88
+ },
89
+ "Image": {
90
+ id: 'creatives.containersV2.Line.Edit.Image',
91
+ defaultMessage: 'Image',
92
+ },
93
+ "Max file size acceptable is 5mb": {
94
+ id: 'creatives.containersV2.Line.Edit.maxUploadFileSize',
95
+ defaultMessage: 'Max file size acceptable is 5mb',
96
+ },
97
+ "Please upload Image": {
98
+ id: 'creatives.containersV2.Line.Edit.pleaseUploadImage',
99
+ defaultMessage: 'Please upload image',
100
+ },
101
+ "Upload Image": {
102
+ id: 'creatives.containersV2.Line.Edit.uploadImage',
103
+ defaultMessage: 'Upload image',
104
+ },
105
+ "Line Template Edited Successfully": {
106
+ id: 'creatives.containersV2.Line.Edit.templateEditedSuccessfully',
107
+ defaultMessage: 'Line template edited successfully',
108
+ },
109
+ "somethingWentWrong": {
110
+ id: 'creatives.containersV2.Line.Edit.somethingWentWrong',
111
+ defaultMessage: 'Something went wrong!!',
112
+ },
113
+ "Do you really want to go back? All your temporary changes will be lost!": {
114
+ id: 'creatives.containersV2.Line.Edit.goBackConfirmation',
115
+ defaultMessage: "Going back will discard all the changes you've made. Continue?",
116
+ },
117
+ "Name and Description": {
118
+ id: 'creatives.containersV2.Line.Edit.nameAndDescription',
119
+ defaultMessage: 'Name and description',
120
+ },
121
+ "Button 1": {
122
+ id: 'creatives.containersV2.Line.Edit.button1',
123
+ defaultMessage: 'Button 1',
124
+ },
125
+ "Button 2": {
126
+ id: 'creatives.containersV2.Line.Edit.button2',
127
+ defaultMessage: 'Button 2',
128
+ },
129
+ "File size cannot be more than 5mb": {
130
+ id: 'creatives.containersV2.Line.Edit.uploadFileSizeError',
131
+ defaultMessage: 'File size cannot be more than 5mb',
132
+ },
133
+ "value cannot be empty.": {
134
+ id: 'creatives.containersV2.Line.Edit.valueCantEmpty',
135
+ defaultMessage: 'value cannot be empty.',
136
+ },
137
+ "Uploading Image...": {
138
+ id: 'creatives.containersV2.Line.Edit.uploadingImage',
139
+ defaultMessage: 'Uploading image...',
140
+ },
141
+ "Campaigns": {
142
+ id: 'creatives.containersV2.Line.Edit.Campaigns',
143
+ defaultMessage: 'Campaigns',
144
+ },
145
+ "Creatives": {
146
+ id: 'creatives.containersV2.Line.Edit.Creatives',
147
+ defaultMessage: 'Creatives',
148
+ },
149
+ "mobilePush": {
150
+ id: 'creatives.containersV2.Line.Edit.mobilePush',
151
+ defaultMessage: 'Mobile Push',
152
+ },
153
+ "templateNotConfigured": {
154
+ id: 'creatives.containersV2.Line.Edit.templateNotConfigured',
155
+ defaultMessage: 'template not configured,',
156
+ },
157
+ "alertMessage": {
158
+ id: 'creatives.containersV2.Line.Edit.alertMessage',
159
+ defaultMessage: 'Alert',
160
+ },
161
+ "androidNotConfigured": {
162
+ id: 'creatives.containersV2.Line.Edit.androidNotConfigured',
163
+ defaultMessage: 'Android template is not configured. Save without Android template',
164
+ },
165
+ "iosNotConfigured": {
166
+ id: 'creatives.containersV2.Line.Edit.iosNotConfigured',
167
+ defaultMessage: 'IOS template is not configured, Save without IOS template',
168
+ },
169
+ "goBackTemporaryChangesLost": {
170
+ id: 'creatives.containersV2.Line.Edit.goBackTemporaryChangesLost',
171
+ defaultMessage: 'Do you really want to go back? All your temporary changes will be lost!',
172
+ },
173
+ });
@@ -0,0 +1,83 @@
1
+ /*
2
+ *
3
+ * Create reducer
4
+ *
5
+ */
6
+
7
+ import { fromJS } from 'immutable';
8
+ import * as types from './constants';
9
+
10
+ const initialState = fromJS({
11
+ editTemplateInProgress: false,
12
+ editResponse: {},
13
+ getTemplateDetailsInProgress: false,
14
+ templateDetails: {},
15
+ });
16
+
17
+ function editReducer(state = initialState, action) {
18
+ switch (action.type) {
19
+ case types.DEFAULT_ACTION:
20
+ return state;
21
+ case types.EDIT_TEMPLATE_REQUEST:
22
+ return state
23
+ .set('editTemplateInProgress', true)
24
+ .set('editTemplateError', false)
25
+ .set('editTemplateErrorMessage', fromJS(""));
26
+ case types.EDIT_TEMPLATE_SUCCESS:
27
+ return state.set('editTemplateInProgress', false)
28
+ .set('editResponse', action.data)
29
+ .set('editTemplateError', (action.statusCode !== undefined && action.statusCode > 300))
30
+ .set('editTemplateErrorMessage', fromJS(action.errorMsg));
31
+ case types.EDIT_TEMPLATE_FAILURE:
32
+ return state
33
+ .set('editTemplateInProgress', false)
34
+ .set('editTemplateError', true)
35
+ .set('editTemplateErrorMessage', fromJS(action.errorMsg));
36
+ case types.GET_TEMPLATE_DETAILS_REQUEST:
37
+ return state.set('getTemplateDetailsInProgress', true);
38
+ case types.GET_TEMPLATE_DETAILS_SUCCESS:
39
+ case types.SET_SELECTED_TEMPLATE:
40
+ return state.set('getTemplateDetailsInProgress', false)
41
+ .set('templateDetails', action.data);
42
+ case types.GET_TEMPLATE_DETAILS_FAILURE:
43
+ return state.set('getTemplateDetailsInProgress', false);
44
+ case types.CLEAR_EDIT_RESPONSE_REQUEST:
45
+ return state.set('editResponse', {});
46
+ case types.UPLOAD_ASSET_REQUEST:
47
+ return state
48
+ .set('uploadAssetSuccess', false)
49
+ .set('assetUploading', true);
50
+ case types.UPLOAD_ASSET_SUCCESS:
51
+ return state
52
+ .set('uploadAssetSuccess', (action.statusCode !== undefined && action.statusCode !== '' && action.statusCode < 300))
53
+ .set('assetUploading', false)
54
+ .set('uploadedAssetData', action.data);
55
+ case types.UPLOAD_ASSET_FAILURE:
56
+ return state
57
+ .set('uploadAssetSuccess', false)
58
+ .set('assetUploading', false);
59
+ case types.CLEAR_DATA:
60
+ return state
61
+ .delete('uploadedAssetData')
62
+ .delete('metaEntities')
63
+ .delete('templateDetails');
64
+ case types.CLEAR_ASSET:
65
+ return state
66
+ .delete('uploadedAssetData');
67
+ case types.GET_LINE_TEMPLATES_LIST_REQUEST:
68
+ return state
69
+ .set('fetchingDefaultTemplates', true);
70
+ case types.GET_LINE_TEMPLATES_LIST_SUCCESS:
71
+ return state
72
+ .set('fetchingDefaultTemplates', false)
73
+ .set('lineTemplates', fromJS(action.data));
74
+ case types.GET_LINE_TEMPLATES_LIST_FAILURE:
75
+ return state
76
+ .set('fetchingDefaultTemplates', false)
77
+ .set('errorFetchingDefaultTempalte', true);
78
+ default:
79
+ return state;
80
+ }
81
+ }
82
+
83
+ export default editReducer;
@@ -0,0 +1,81 @@
1
+ import { call, put, takeLatest, take, cancel } from 'redux-saga/effects';
2
+ import { LOCATION_CHANGE } from 'react-router-redux';
3
+ // import { schema, normalize } from 'normalizr';
4
+ import * as Api from '../../../services/api';
5
+ import * as types from './constants';
6
+
7
+ // Individual exports for testing
8
+ export function* editTemplate(template) {
9
+ let errorMsg;
10
+ try {
11
+ console.log('saga editTemplate line', template);
12
+ const result = yield call(Api.createLineTemplate, template);
13
+ console.log('saga editTemplate success line', result);
14
+ if (result.message || result.status.code === 500) {
15
+ errorMsg = result.message;
16
+ }
17
+ yield put({ type: types.EDIT_TEMPLATE_SUCCESS, data: result.response, statusCode: result.status ? result.status.code : '', errorMsg });
18
+ } catch (error) {
19
+ yield put({ type: types.EDIT_TEMPLATE_FAILURE, error, errorMsg });
20
+ }
21
+ }
22
+
23
+ export function* getTemplateDetails(id) {
24
+ try {
25
+ console.log('saga get Template details line', id);
26
+ const result = yield call(Api.getTemplateDetails, id);
27
+ // const sidebar = result.response.sidebar;
28
+ yield put({ type: types.GET_TEMPLATE_DETAILS_SUCCESS, data: result.response });
29
+ } catch (error) {
30
+ yield put({ type: types.GET_TEMPLATE_DETAILS_FAILURE, error });
31
+ }
32
+ }
33
+
34
+ export function* uploadAsset(file, assetType, fileParams, mode) {
35
+ try {
36
+ const result = yield call(Api.uploadFile, file, assetType, fileParams, mode);
37
+ yield put({ type: types.UPLOAD_ASSET_SUCCESS, data: result.response.asset, statusCode: result.status ? result.status.code : '' });
38
+ } catch (error) {
39
+ yield put({ type: types.UPLOAD_ASSET_FAILURE, error });
40
+ }
41
+ }
42
+
43
+ export function* getLineTemplatesList(params) {
44
+ try {
45
+ console.log('Saga param line ', params.channel, params.queryParams);
46
+ const result = yield call(Api.getAllTemplates, {channel: params.channel, queryParams: params.queryParams});
47
+ yield put({ type: types.GET_LINE_TEMPLATES_LIST_SUCCESS, data: result.response.templates, templateData: result.response.mapped});
48
+ } catch (error) {
49
+ yield put({ type: types.GET_LINE_TEMPLATES_LIST_FAILURE, error });
50
+ }
51
+ }
52
+
53
+ function* watchEditTemplate() {
54
+ const watcher = yield takeLatest(types.EDIT_TEMPLATE_REQUEST, editTemplate);
55
+ yield take(LOCATION_CHANGE);
56
+ yield cancel(watcher);
57
+ }
58
+
59
+ function* watchGetTemplateDetails() {
60
+ const watcher = yield takeLatest(types.GET_TEMPLATE_DETAILS_REQUEST, getTemplateDetails);
61
+ yield take(LOCATION_CHANGE);
62
+ yield cancel(watcher);
63
+ }
64
+
65
+ function* watchUploadAsset() {
66
+ const watcher = yield takeLatest(types.UPLOAD_ASSET_REQUEST, uploadAsset);
67
+ yield take(LOCATION_CHANGE);
68
+ yield cancel(watcher);
69
+ }
70
+
71
+ function* watchLineTemplatesList() {
72
+ const watcher = yield takeLatest(types.GET_LINE_TEMPLATES_LIST_REQUEST, getLineTemplatesList);
73
+ yield take(LOCATION_CHANGE);
74
+ yield cancel(watcher);
75
+ }
76
+
77
+ // All sagas to be loaded
78
+ export default [
79
+ watchEditTemplate, watchGetTemplateDetails, watchLineTemplatesList,
80
+ watchUploadAsset,
81
+ ];
@@ -0,0 +1,29 @@
1
+ import { createSelector } from 'reselect';
2
+
3
+ /**
4
+ * Direct selector to the create state domain
5
+ */
6
+ const selectLineEditDomain = () => (state) => state.get('edit');
7
+
8
+ /**
9
+ * Other specific selectors
10
+ */
11
+
12
+
13
+ /**
14
+ * Default selector used by Create
15
+ */
16
+
17
+ const makeSelectEdit = () => createSelector(
18
+ selectLineEditDomain(),
19
+ (substate) => substate.toJS()
20
+ );
21
+ const makeSelectEditResponse = () => createSelector(
22
+ selectLineEditDomain(), (dimensionState) => dimensionState.get('editResponse')
23
+ );
24
+ const makeSelectTemplateDetailsResponse = () => createSelector(
25
+ selectLineEditDomain(), (dimensionState) => dimensionState.get('templateDetails')
26
+ );
27
+ export {
28
+ makeSelectEdit, makeSelectEditResponse, makeSelectTemplateDetailsResponse,
29
+ };
@@ -0,0 +1,18 @@
1
+
2
+ import {
3
+ defaultAction,
4
+ } from '../actions';
5
+ import {
6
+ DEFAULT_ACTION,
7
+ } from '../constants';
8
+
9
+ describe('Create actions', () => {
10
+ describe('Default Action', () => {
11
+ it('has a type of DEFAULT_ACTION', () => {
12
+ const expected = {
13
+ type: DEFAULT_ACTION,
14
+ };
15
+ expect(defaultAction()).toEqual(expected);
16
+ });
17
+ });
18
+ });
@@ -0,0 +1,10 @@
1
+ // import React from 'react';
2
+ // import { shallow } from 'enzyme';
3
+
4
+ // import { Create } from '../index';
5
+
6
+ describe('<Create />', () => {
7
+ it('Expect to have unit tests specified', () => {
8
+ expect(true).toEqual(false);
9
+ });
10
+ });
@@ -0,0 +1,9 @@
1
+
2
+ import { fromJS } from 'immutable';
3
+ import createReducer from '../reducer';
4
+
5
+ describe('createReducer', () => {
6
+ it('returns the initial state', () => {
7
+ expect(createReducer(undefined, {})).toEqual(fromJS({}));
8
+ });
9
+ });
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Test sagas
3
+ */
4
+
5
+ /* eslint-disable redux-saga/yield-effects */
6
+ // import { take, call, put, select } from 'redux-saga/effects';
7
+ // import { defaultSaga } from '../sagas';
8
+
9
+ // const generator = defaultSaga();
10
+
11
+ describe('defaultSaga Saga', () => {
12
+ it('Expect to have unit tests specified', () => {
13
+ expect(true).toEqual(false);
14
+ });
15
+ });
@@ -0,0 +1,10 @@
1
+ // import { fromJS } from 'immutable';
2
+ // import { makeSelectCreateDomain } from '../selectors';
3
+
4
+ // const selector = makeSelectCreateDomain();
5
+
6
+ describe('makeSelectCreateDomain', () => {
7
+ it('Expect to have unit tests specified', () => {
8
+ expect(true).toEqual(false);
9
+ });
10
+ });
@@ -346,7 +346,7 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
346
346
  });
347
347
  } else {
348
348
  selectedAccount = accounts[0];
349
- formData['mobilepush-accounts'] = accounts[0].id;
349
+ formData['mobilepush-accounts'] = selectedAccount?.id;
350
350
  }
351
351
  this.props.actions.setWeChatAccount(selectedAccount);
352
352
  this.setState({formData, accountsOptions: accounts.map((acc) => ({key: acc.id, label: acc.name, value: acc.id}))});
@@ -361,7 +361,7 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
361
361
  obj.type = 'MOBILEPUSH';
362
362
  obj.name = formData['template-name'];
363
363
  obj.definition = {
364
- accountId: selectedWeChatAccount.id,
364
+ accountId: selectedWeChatAccount?.id,
365
365
  licenseCode: selectedWeChatAccount.sourceAccountIdentifier,
366
366
  };
367
367
  if (this.props.location.query && this.props.location.query.module !== 'dvs') {
@@ -45,7 +45,7 @@ export class MobilepushWrapper extends React.Component { // eslint-disable-line
45
45
  },
46
46
  {
47
47
  title: <FormattedMessage {...messages.text}/>,
48
- content: <WithNoImage height="124px" width={"224px"}/>,
48
+ content: <WithNoImage height="216px" width={"224px"}/>,
49
49
  value: 'text',
50
50
  // onClick: () => {
51
51
  // this.emailUploader.current.click();
@@ -32,8 +32,7 @@
32
32
  padding: $CAP_SPACE_16 $CAP_SPACE_12;
33
33
 
34
34
  .ant-card-meta-description {
35
- height: 250px;
36
- word-wrap: break-word;
35
+ height: 222px;
37
36
  }
38
37
  }
39
38
 
@@ -41,6 +40,9 @@
41
40
  .ant-card-body {
42
41
  padding: $CAP_SPACE_24 0;
43
42
  }
43
+ .ant-card-meta-description {
44
+ height: 250px;
45
+ }
44
46
  .ant-card-meta {
45
47
  padding: 0;
46
48
  }
@@ -1418,7 +1418,11 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1418
1418
  }
1419
1419
  }
1420
1420
  if (this.isEnabledInLibraryModule("callSelectFromProps")) {
1421
- this.props.onSelectTemplate(this.selectTemplate(id), this.props.fbAdManager);
1421
+ let data =id;
1422
+ if(this.props.fbAdManager){
1423
+ data = this.selectTemplate(id)
1424
+ }
1425
+ this.props.onSelectTemplate(data, this.props.fbAdManager);
1422
1426
  } else {
1423
1427
  timeTracker.startTimer(CHANNEL_EDIT_TRACK_MAPPING[this.state.channel.toLowerCase()]);
1424
1428
  if (this.state.channel.toLowerCase() === 'ebill') {
@@ -1433,7 +1437,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1433
1437
 
1434
1438
  selectTemplate = (id) => find(this.props.TemplatesList, {_id: id})
1435
1439
 
1436
-
1437
1440
  handlePreviewClick(template, modeType) {
1438
1441
  this.togglePreview();
1439
1442
  const templateInfo = cloneDeep(template);
@@ -28,7 +28,7 @@ import FTP from '../FTP';
28
28
  import Gallery from '../Assets/Gallery';
29
29
  import withStyles from '../../hoc/withStyles';
30
30
  import styles, { CapTabStyle } from './TemplatesV2.style';
31
- import { CREATIVES_UI_VIEW } from '../App/constants';
31
+ import { CREATIVES_UI_VIEW, LOYALTY} from '../App/constants';
32
32
  import AccessForbidden from '../../v2Components/AccessForbidden';
33
33
 
34
34
  const {CapCustomCardList} = CapCustomCard;
@@ -39,6 +39,9 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
39
39
  constructor(props) {
40
40
  super(props);
41
41
  let defaultChannel = get(this, 'props.channel') || get(this, 'props.params.channel') || 'sms';
42
+ if (defaultChannel === LOYALTY) {
43
+ defaultChannel = 'sms';
44
+ }
42
45
  const {
43
46
  intl,
44
47
  channelsToHide = [],
@@ -158,7 +161,11 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
158
161
  );
159
162
 
160
163
  getFacebookComponent = () => {
161
- const { messageDetails, cap, onFacebookSubmit, messageStrategy, showDisabledFBInfo, orgUnitId } = this.props;
164
+ const { messageDetails, cap, onFacebookSubmit,
165
+ messageStrategy,
166
+ showDisabledFBInfo,
167
+ orgUnitId,
168
+ onSelectTemplate } = this.props;
162
169
  return (
163
170
  <Facebook
164
171
  {...this.props}
@@ -168,6 +175,7 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
168
175
  messageStrategy={messageStrategy}
169
176
  showDisabledFBInfo={showDisabledFBInfo}
170
177
  orgUnitId={orgUnitId}
178
+ onSelectTemplate={onSelectTemplate}
171
179
  />
172
180
  );
173
181
  }
@@ -220,7 +228,7 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
220
228
  router={this.props.router}
221
229
  isFullMode={this.props.isFullMode}
222
230
  createNew={this.props.createNew}
223
- onSelectTemplate={this.props.onSelectTemplate}
231
+ onSelectTemplate={(id) => this.props.onSelectTemplate(this.selectTemplate(id))}
224
232
  renderNewCardGrid={this.getTemplateDataForGrid}
225
233
  handlePeviewTemplate={this.props.handlePeviewTemplate}
226
234
  messageStrategy={this.props.messageStrategy}
@@ -666,7 +666,16 @@ export class MapTemplates extends React.Component { // eslint-disable-line react
666
666
  type: "radioGroup",
667
667
  metaType: "text",
668
668
  datatype: "string",
669
- options: [intl.formatMessage(messages.redirectOptionURL), intl.formatMessage(messages.redirectOptionMiniProgram)],
669
+ options: [
670
+ {
671
+ value: URL,
672
+ label: intl.formatMessage(messages.redirectOptionURL)
673
+ },
674
+ {
675
+ value: MINI_PROGRAM,
676
+ label: intl.formatMessage(messages.redirectOptionMiniProgram)
677
+ }
678
+ ],
670
679
  errorMessage: intl.formatMessage(messages.redirectionOptionError),
671
680
  required: true,
672
681
  fluid: true,
@@ -764,7 +773,8 @@ export class MapTemplates extends React.Component { // eslint-disable-line react
764
773
  if (!isEmpty(weCrmAccounts)) {
765
774
  forEach(weCrmAccounts, (account) => {
766
775
  if (account.configs && account.configs.is_wecrm_enabled) {
767
- schema.standalone.sections[0].childSections[1].childSections[0].childSections[0].inputFields[0].options.push({
776
+ const options = schema?.standalone?.sections[0]?.childSections[1]?.childSections[0]?.childSections[0]?.inputFields[0]?.options;
777
+ options && options.push({
768
778
  key: account.uuid,
769
779
  label: account.name,
770
780
  value: account.name,