@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.
- package/app.js +5 -1
- package/components/FormBuilder/index.js +2 -2
- package/containers/Email/index.js +8 -3
- package/containers/MobilePush/Create/index.js +2 -2
- package/containers/MobilePush/Edit/index.js +2 -2
- package/containers/WeChat/MapTemplates/index.js +15 -3
- package/package.json +1 -1
- package/services/api.js +20 -5
- package/translations/en.json +113 -2
- package/translations/zh.json +112 -1
- package/utils/gtmTrackers/gtmEvents/creativeDetails.js +6 -2
- package/utils/gtmTrackers/index.js +8 -4
- package/v2Components/CapImageUpload/index.js +14 -8
- package/v2Components/FormBuilder/index.js +10 -1
- package/v2Components/NavigationBar/index.js +63 -29
- package/v2Components/NavigationBar/messages.js +5 -0
- package/v2Components/TemplatePreview/assets/images/mobile.svg +24 -0
- package/v2Containers/App/constants.js +23 -3
- package/v2Containers/Cap/actions.js +2 -2
- package/v2Containers/Cap/constants.js +3 -2
- package/v2Containers/Cap/index.js +31 -18
- package/v2Containers/Cap/messages.js +8 -0
- package/v2Containers/Cap/sagas.js +18 -6
- package/v2Containers/CapFacebookPreview/constants.js +4 -0
- package/v2Containers/CapFacebookPreview/index.js +92 -67
- package/v2Containers/CapFacebookPreview/reducer.js +19 -10
- package/v2Containers/CreativesContainer/SlideBoxContent.js +2 -0
- package/v2Containers/CreativesContainer/index.js +80 -2
- package/v2Containers/Facebook/Advertisement/index.js +2 -2
- package/v2Containers/Facebook/Advertisement/index.scss +1 -1
- package/v2Containers/Facebook/index.js +15 -4
- package/v2Containers/Line/Container/Drawer/index.js +1 -1
- package/v2Containers/Line/Create/_lineCreate.scss +64 -0
- package/v2Containers/Line/Create/actions.js +94 -0
- package/v2Containers/Line/Create/constants.js +43 -0
- package/v2Containers/Line/Create/index.js +1132 -0
- package/v2Containers/Line/Create/initialSchema.js +378 -0
- package/v2Containers/Line/Create/messages.js +229 -0
- package/v2Containers/Line/Create/reducer.js +99 -0
- package/v2Containers/Line/Create/sagas.js +113 -0
- package/v2Containers/Line/Create/selectors.js +30 -0
- package/v2Containers/Line/CreateWrapper/constants.js +2 -0
- package/v2Containers/Line/CreateWrapper/index.js +117 -0
- package/v2Containers/Line/CreateWrapper/messages.js +55 -0
- package/v2Containers/Line/Edit/_lineEdit.scss +23 -0
- package/v2Containers/Line/Edit/actions.js +79 -0
- package/v2Containers/Line/Edit/constants.js +27 -0
- package/v2Containers/Line/Edit/index.js +1051 -0
- package/v2Containers/Line/Edit/messages.js +173 -0
- package/v2Containers/Line/Edit/reducer.js +83 -0
- package/v2Containers/Line/Edit/sagas.js +81 -0
- package/v2Containers/Line/Edit/selectors.js +29 -0
- package/v2Containers/Line/Edit/tests/actions.test.js +18 -0
- package/v2Containers/Line/Edit/tests/index.test.js +10 -0
- package/v2Containers/Line/Edit/tests/reducer.test.js +9 -0
- package/v2Containers/Line/Edit/tests/sagas.test.js +15 -0
- package/v2Containers/Line/Edit/tests/selectors.test.js +10 -0
- package/v2Containers/MobilePush/Edit/index.js +2 -2
- package/v2Containers/MobilepushWrapper/index.js +1 -1
- package/v2Containers/Templates/_templates.scss +4 -2
- package/v2Containers/Templates/index.js +5 -2
- package/v2Containers/TemplatesV2/index.js +11 -3
- 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,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'] =
|
|
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
|
|
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="
|
|
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:
|
|
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
|
-
|
|
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,
|
|
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: [
|
|
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
|
|
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,
|