@capillarytech/creatives-library 3.0.4 → 3.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/FormBuilder/index.js +15 -15
- package/containers/Dashboard/index.js +5 -0
- package/containers/Email/index.js +5 -4
- package/containers/Line/Create/index.js +3 -3
- package/containers/MobilePush/Edit/index.js +2 -2
- package/containers/WeChat/MapTemplates/index.js +64 -58
- package/containers/WeChat/RichmediaTemplates/Create/index.js +3 -3
- package/index.html +3 -0
- package/package.json +1 -1
- package/routes.js +1 -3
- package/v2Components/FormBuilder/index.js +12 -18
- package/v2Components/NavigationBar/index.js +7 -4
- package/v2Components/NavigationBar/messages.js +6 -2
- package/v2Containers/Cap/index.js +2 -1
- package/v2Containers/CreativesContainer/SlideBoxContent.js +6 -2
- package/v2Containers/Email/index.js +27 -42
- package/v2Containers/Email/initialSchema.js +2 -58
- package/v2Containers/Email/messages.js +4 -0
- package/v2Containers/Email/sagas.js +0 -2
- package/v2Containers/MobilePush/Create/actions.js +2 -2
- package/v2Containers/MobilePush/Create/index.js +17 -16
- package/v2Containers/MobilePush/Create/messages.js +1 -1
- package/v2Containers/MobilePush/Create/sagas.js +3 -0
- package/v2Containers/MobilePush/Edit/index.js +13 -7
- package/v2Containers/MobilePush/initialSchema.js +3 -0
- package/v2Containers/MobilepushWrapper/index.js +3 -1
- package/v2Containers/Templates/index.js +14 -11
- package/assets/android-message-gui-2.svg +0 -55
- package/components/CallTaskPreview/_callTaskPreview.scss +0 -17
- package/components/CallTaskPreview/images/Footer.png +0 -0
- package/components/CallTaskPreview/images/Header.png +0 -0
- package/components/CallTaskPreview/index.js +0 -37
- package/components/CallTaskPreview/messages.js +0 -13
- package/components/CallTaskPreview/tests/index.test.js +0 -15
- package/components/CmsTemplatesComponent/index.js +0 -33
- package/components/CmsTemplatesComponent/messages.js +0 -17
- package/components/CmsTemplatesComponent/tests/index.test.js +0 -10
- package/components/EmailMobilePreview/index.js +0 -129
- package/components/EmailMobilePreview/index.scss +0 -55
- package/components/EmailPreviewV2/_emailPreviewV2.scss +0 -69
- package/components/EmailPreviewV2/index.js +0 -132
- package/components/EmailPreviewV2/messages.js +0 -41
- package/components/EmailPreviewV2/tests/index.test.js +0 -10
- package/components/MobilePushPreviewV2/index.js +0 -120
- package/components/MobilePushPreviewV2/messages.js +0 -13
- package/components/MobilePushPreviewV2/tests/index.test.js +0 -10
- package/components/NewCallTask/_newCallTask.scss +0 -9
- package/components/NewCallTask/index.js +0 -152
- package/components/NewCallTask/messages.js +0 -29
- package/components/NewCallTask/tests/index.test.js +0 -10
- package/components/SmsPreviewV2/_smsPreviewV2.scss +0 -353
- package/components/SmsPreviewV2/index.js +0 -69
- package/components/SmsPreviewV2/messages.js +0 -13
- package/components/SmsPreviewV2/tests/index.test.js +0 -10
- package/v2Components/DateFilter/index.js +0 -349
- package/v2Components/DateFilter/messages.js +0 -17
- package/v2Components/DateFilter/tests/index.test.js +0 -15
- package/v2Components/DateRange/index.js +0 -113
- package/v2Components/DateRange/messages.js +0 -13
- package/v2Components/DateRange/tests/index.test.js +0 -10
- package/v2Components/PageHeader/_pageHeader.scss +0 -22
- package/v2Components/PageHeader/index.js +0 -37
- package/v2Components/PageHeader/messages.js +0 -13
- package/v2Components/PageHeader/tests/index.test.js +0 -10
- package/v2Components/Sidebar/_sidebar.scss +0 -115
- package/v2Components/Sidebar/index.js +0 -208
- package/v2Components/Sidebar/messages.js +0 -21
- package/v2Components/Sidebar/tests/index.test.js +0 -10
- package/v2Components/SmsEditor/index.js +0 -55
- package/v2Components/SmsEditor/tests/index.test.js +0 -10
- package/v2Components/TopBar/_topbar.scss +0 -46
|
@@ -247,7 +247,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
247
247
|
}
|
|
248
248
|
}
|
|
249
249
|
|
|
250
|
-
onEdit(
|
|
250
|
+
onEdit() {
|
|
251
251
|
|
|
252
252
|
}
|
|
253
253
|
|
|
@@ -307,7 +307,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
307
307
|
});
|
|
308
308
|
}
|
|
309
309
|
|
|
310
|
-
handleCloseModal = (
|
|
310
|
+
handleCloseModal = () => {
|
|
311
311
|
const event = this.state.currentEvent;
|
|
312
312
|
if (!_.isEmpty(this.state.currentEvent)) {
|
|
313
313
|
switch (event) {
|
|
@@ -467,15 +467,15 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
467
467
|
const tagValidationResponse = this.validateTags(content, tags, injectedTags);
|
|
468
468
|
|
|
469
469
|
if (tagValidationResponse.valid) {
|
|
470
|
-
errorData['0']['message-editor']
|
|
470
|
+
_.set(errorData, `['0']['message-editor']`, false);
|
|
471
471
|
} else {
|
|
472
472
|
|
|
473
|
-
errorData['0']['message-editor']
|
|
473
|
+
_.set(errorData, `['0']['message-editor']`, true);
|
|
474
474
|
isValid = false;
|
|
475
475
|
}
|
|
476
476
|
if (content.trim() === '') {
|
|
477
477
|
|
|
478
|
-
errorData['0']['message-editor']
|
|
478
|
+
_.set(errorData, `['0']['message-editor']`, true);
|
|
479
479
|
isValid = false;
|
|
480
480
|
}
|
|
481
481
|
}
|
|
@@ -485,19 +485,19 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
485
485
|
const imgContentLengthPreview = this.state.formData['0'].imagePreview.length;
|
|
486
486
|
if ( (imgContentLength < 1) && (imgContentLengthPreview < 1) ) {
|
|
487
487
|
|
|
488
|
-
errorData['0'].image
|
|
489
|
-
errorData['0'].imagePreview
|
|
488
|
+
_.set(errorData, `['0'].image`, true);
|
|
489
|
+
_.set(errorData, `['0'].imagePreview`, true);
|
|
490
490
|
isValid = false;
|
|
491
491
|
}else{
|
|
492
|
-
errorData['0'].image
|
|
493
|
-
errorData['0'].imagePreview
|
|
492
|
+
_.set(errorData, `['0'].image`, false);
|
|
493
|
+
_.set(errorData, `['0'].imagePreview`, false);
|
|
494
494
|
}
|
|
495
495
|
}
|
|
496
496
|
if(type !== 'embedded' && (!this.state.formData['template-name'] || this.state.formData['template-name'] === '')) {
|
|
497
|
-
errorData['template-name']
|
|
497
|
+
_.set(errorData, `['template-name']`, true);
|
|
498
498
|
isValid = false;
|
|
499
499
|
} else {
|
|
500
|
-
errorData['template-name']
|
|
500
|
+
_.set(errorData, `['template-name']`, false);
|
|
501
501
|
}
|
|
502
502
|
}
|
|
503
503
|
|
|
@@ -1068,7 +1068,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
1068
1068
|
this.setState({errorData});
|
|
1069
1069
|
}
|
|
1070
1070
|
|
|
1071
|
-
initializeMultiColSection(section, formDataObj, isContainer, index, ifError
|
|
1071
|
+
initializeMultiColSection(section, formDataObj, isContainer, index, ifError) {
|
|
1072
1072
|
const formData = _.cloneDeep(formDataObj);
|
|
1073
1073
|
const newFormData = {};
|
|
1074
1074
|
newFormData[index] = {};
|
|
@@ -1298,7 +1298,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
1298
1298
|
this.setState({formData, errorData}, () => {
|
|
1299
1299
|
this.validateForm();
|
|
1300
1300
|
if (this.props.isSchemaChanged || resetTabKeys) {
|
|
1301
|
-
this.resetTabKeys(formData, this.props.tabCount, true);
|
|
1301
|
+
this.resetTabKeys(this.state.formData, this.props.tabCount, true);
|
|
1302
1302
|
}
|
|
1303
1303
|
});
|
|
1304
1304
|
}
|
|
@@ -1802,7 +1802,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
1802
1802
|
}
|
|
1803
1803
|
return true;
|
|
1804
1804
|
};
|
|
1805
|
-
callChildEvent(data, val, event
|
|
1805
|
+
callChildEvent(data, val, event) {
|
|
1806
1806
|
if (!event) {
|
|
1807
1807
|
return;
|
|
1808
1808
|
}
|
|
@@ -2834,7 +2834,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
2834
2834
|
key={`icon-${val.id}`}
|
|
2835
2835
|
id={val.id}
|
|
2836
2836
|
offset={val.offset}
|
|
2837
|
-
|
|
2837
|
+
span={val.width ? val.width : 1}
|
|
2838
2838
|
onClick={(data) => this.callChildEvent(data, val, val.submitAction)}
|
|
2839
2839
|
className={val.className ? val.className : ''}
|
|
2840
2840
|
style={val.colStyle ? val.colStyle : {}}
|
|
@@ -12,6 +12,11 @@ import * as actions from './actions';
|
|
|
12
12
|
import PageHeader from '../../components/PageHeader';
|
|
13
13
|
import BreadCrumbs from '../../components/BreadCrumbs/index';
|
|
14
14
|
export class Dashboard extends React.Component { // eslint-disable-line react/prefer-stateless-function
|
|
15
|
+
componentWillMount() {
|
|
16
|
+
this.props.router.push({
|
|
17
|
+
pathname: `/sms`,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
15
20
|
render() {
|
|
16
21
|
const breadCrumbLocations = [
|
|
17
22
|
{
|
|
@@ -1758,9 +1758,9 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
1758
1758
|
"base": {},
|
|
1759
1759
|
};
|
|
1760
1760
|
const baseData = {};
|
|
1761
|
-
const baseLanguage = props.Global.currentOrgDetails.basic_details.base_language;
|
|
1761
|
+
const baseLanguage = props.Global.currentOrgDetails.basic_details.base_language || 'en';
|
|
1762
1762
|
this.supportedLanguages = props.Global.currentOrgDetails.basic_details.supported_languages;
|
|
1763
|
-
const languageObject = this.supportedLanguages[_.findIndex(this.supportedLanguages, {iso_code: baseLanguage})];
|
|
1763
|
+
const languageObject = this.supportedLanguages[_.findIndex(this.supportedLanguages, {iso_code: baseLanguage})] || {iso_code: baseLanguage || 'en', lang_id: -1, language: baseLanguage || "English"};
|
|
1764
1764
|
baseData.activeTab = baseLanguage;
|
|
1765
1765
|
baseData[languageObject.iso_code] = {};
|
|
1766
1766
|
baseData[languageObject.iso_code].is_drag_drop = false;
|
|
@@ -2000,6 +2000,7 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
2000
2000
|
});
|
|
2001
2001
|
console.log('HandleHideMarkAsFinal ', JSON.stringify(schema));
|
|
2002
2002
|
this.setState({schema, isSchemaChanged: true});
|
|
2003
|
+
return schema;
|
|
2003
2004
|
}
|
|
2004
2005
|
|
|
2005
2006
|
showSubject = () => {
|
|
@@ -2493,14 +2494,14 @@ export class Email extends React.Component { // eslint-disable-line react/prefer
|
|
|
2493
2494
|
const baseLanguage = this.props.Global.currentOrgDetails && this.props.Global.currentOrgDetails.basic_details && this.props.Global.currentOrgDetails.basic_details.base_language && this.props.Global.currentOrgDetails.basic_details.base_language !== "" ? this.props.Global.currentOrgDetails.basic_details.base_language : 'en';
|
|
2494
2495
|
const supportedLanguages = this.props.Global.currentOrgDetails.basic_details.supported_languages;
|
|
2495
2496
|
if (!supportedLanguages) {
|
|
2496
|
-
tempEl.value = 'English';
|
|
2497
|
+
tempEl.value = baseLanguage || 'English';
|
|
2497
2498
|
return;
|
|
2498
2499
|
}
|
|
2499
2500
|
const langObject = supportedLanguages.find( (lang) => lang.iso_code === baseLanguage);
|
|
2500
2501
|
if (langObject) {
|
|
2501
2502
|
tempEl.value = langObject.language;
|
|
2502
2503
|
} else {
|
|
2503
|
-
tempEl.value = 'English';
|
|
2504
|
+
tempEl.value = baseLanguage || 'English';
|
|
2504
2505
|
}
|
|
2505
2506
|
}
|
|
2506
2507
|
});
|
|
@@ -62,7 +62,7 @@ export class Line extends Component {
|
|
|
62
62
|
this.state = {
|
|
63
63
|
schema: {},
|
|
64
64
|
isSchemaChanged: false,
|
|
65
|
-
formData: {},
|
|
65
|
+
formData: {0: {}},
|
|
66
66
|
tabCount: 1,
|
|
67
67
|
currentTab: 1,
|
|
68
68
|
loading: false,
|
|
@@ -757,7 +757,7 @@ export class Line extends Component {
|
|
|
757
757
|
</Row>
|
|
758
758
|
<Row>
|
|
759
759
|
<Col>
|
|
760
|
-
<FormBuilder
|
|
760
|
+
{!_.isEmpty(this.state.schema) && <FormBuilder
|
|
761
761
|
key={"form builder"}
|
|
762
762
|
schema={this.state.schema}
|
|
763
763
|
onSubmit={this.saveFormData}
|
|
@@ -781,7 +781,7 @@ export class Line extends Component {
|
|
|
781
781
|
router={this.props.router}
|
|
782
782
|
onContextChange={this.handleOnTagsContextChange}
|
|
783
783
|
setModalContent={this.setModalContent}
|
|
784
|
-
/>
|
|
784
|
+
/> }
|
|
785
785
|
</Col>
|
|
786
786
|
</Row>
|
|
787
787
|
</Spin>
|
|
@@ -1967,7 +1967,7 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
|
|
|
1967
1967
|
};
|
|
1968
1968
|
addPrimaryCta = (ev, field, inputSchema) => {
|
|
1969
1969
|
const selectedWeChatAccount = (!_.isEmpty(this.props.Templates.selectedWeChatAccount) ? this.props.Templates.selectedWeChatAccount : this.props.Edit.selectedWeChatAccount);
|
|
1970
|
-
const id =
|
|
1970
|
+
const id = ev ? ev.target.id : field.id;
|
|
1971
1971
|
const schema = inputSchema ? _.cloneDeep(inputSchema) : _.cloneDeep(this.state.schema);
|
|
1972
1972
|
const ck = selectedWeChatAccount.configs ? !!selectedWeChatAccount.configs.deeplink : false;
|
|
1973
1973
|
const deepLinkOptions = selectedWeChatAccount ? _.map(JSON.parse(ck ? selectedWeChatAccount.configs.deeplink : '[]'), (link) => ({label: link.name, value: link.link, title: link.link }) ) : [];
|
|
@@ -2099,7 +2099,7 @@ export class Edit extends React.Component { // eslint-disable-line react/prefer-
|
|
|
2099
2099
|
};
|
|
2100
2100
|
|
|
2101
2101
|
addSecondoryCta = (ev, field, inputSchema) => {
|
|
2102
|
-
const id =
|
|
2102
|
+
const id = ev ? ev.target.id : field.id;
|
|
2103
2103
|
const schema = inputSchema ? _.cloneDeep(inputSchema) : _.cloneDeep(this.state.schema);
|
|
2104
2104
|
const selectedWeChatAccount = (!_.isEmpty(this.props.Templates.selectedWeChatAccount) ? this.props.Templates.selectedWeChatAccount : this.props.Edit.selectedWeChatAccount);
|
|
2105
2105
|
const ck = selectedWeChatAccount.configs ? !!selectedWeChatAccount.configs.deeplink : false;
|
|
@@ -114,6 +114,7 @@ export class MapTemplates extends React.Component { // eslint-disable-line react
|
|
|
114
114
|
this.injectMultiColSection = this.injectMultiColSection.bind(this);
|
|
115
115
|
this.getMappedEvent = this.getMappedEvent.bind(this);
|
|
116
116
|
this.showNext = this.showNext.bind(this);
|
|
117
|
+
this.getFormData = this.getFormData.bind(this);
|
|
117
118
|
this.updateSchema = false;
|
|
118
119
|
this.fetchedWeCrmAccount = false;
|
|
119
120
|
this.isAccountChange = false;
|
|
@@ -329,6 +330,7 @@ export class MapTemplates extends React.Component { // eslint-disable-line react
|
|
|
329
330
|
let selectedTemplate = {};
|
|
330
331
|
let selectedTemplateData = {};
|
|
331
332
|
if (this.props.location.query.type === 'embedded' && (this.props.location.query.module === 'loyalty')) {
|
|
333
|
+
selectedTemplateData = this.state.editTemplateData;
|
|
332
334
|
if (this.props.params.id && _.isEmpty(this.props.WeChat.weChatTemplates) && _.isEqual(formData['wechat-template'], this.state.formData['wechat-template'])) {
|
|
333
335
|
console.log('In If', formData['wechat-template']);
|
|
334
336
|
selectedTemplate = {
|
|
@@ -338,9 +340,9 @@ export class MapTemplates extends React.Component { // eslint-disable-line react
|
|
|
338
340
|
};
|
|
339
341
|
selectedTemplateData = this.props.WeChat.templateDetails;
|
|
340
342
|
} else {
|
|
341
|
-
|
|
343
|
+
const editTemplateData = this.state.editTemplateData;
|
|
342
344
|
_.forEach(this.props.WeChat.weChatTemplates, (template) => {
|
|
343
|
-
if (template.versions.base.template_id === formData['wechat-template']) {
|
|
345
|
+
if (template.versions.base.template_id === formData['wechat-template'] && formData['wechat-template'] !== _.get(editTemplateData, 'versions.base.template_id') ) { // not changing if already selected templates comes
|
|
344
346
|
selectedTemplate = {
|
|
345
347
|
template_id: template.versions.base.template_id,
|
|
346
348
|
title: template.versions.base.Title,
|
|
@@ -370,57 +372,63 @@ export class MapTemplates extends React.Component { // eslint-disable-line react
|
|
|
370
372
|
if (this.isAccountChange) {
|
|
371
373
|
selectedTemplateData = {};
|
|
372
374
|
}
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
_.
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
375
|
+
const newState = {formData};
|
|
376
|
+
if (!_.isEqual(this.state.editTemplateData, selectedTemplateData)) {
|
|
377
|
+
newState.editTemplateData = selectedTemplateData;
|
|
378
|
+
}
|
|
379
|
+
if (!_.isEqual(this.state.formData, formData)) {
|
|
380
|
+
this.setState(newState, () => {
|
|
381
|
+
if (!_.isEmpty(this.state.editTemplateData) && this.props.location.query.type === 'embedded' && this.props.location.query.module === 'loyalty') {
|
|
382
|
+
this.setEditData();
|
|
383
|
+
}
|
|
384
|
+
if (this.props.WeChat.selectedWeChatAccount && !_.isEqual(this.props.WeChat.selectedWeChatAccount.name, formData['wechat-accounts']) && this.props.location.query.type === 'embedded' && this.props.location.query.module === 'loyalty') {
|
|
385
|
+
let selectedAccount = {};
|
|
386
|
+
_.forEach(this.props.WeChat.weCrmAccounts, (account) => {
|
|
387
|
+
if (account.configs && account.configs.is_wecrm_enabled) {
|
|
388
|
+
if (account.name === formData['wechat-accounts']) {
|
|
389
|
+
selectedAccount = account;
|
|
390
|
+
}
|
|
383
391
|
}
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
392
|
+
});
|
|
393
|
+
this.props.actions.setWeChatAccount(selectedAccount);
|
|
394
|
+
this.setSelectedTemplateData({});
|
|
395
|
+
}
|
|
396
|
+
if ((selectedWechatTemplateIndex !== -1 || this.state.isEdit) && !_.isEmpty(selectedTemplate)) {
|
|
397
|
+
let templateData = {};
|
|
398
|
+
if (this.state.isEdit && !_.isEmpty(this.state.editTemplateData)) {
|
|
399
|
+
templateData = {
|
|
400
|
+
template_id: this.state.editTemplateData.versions.base.template_id,
|
|
401
|
+
title: this.state.editTemplateData.versions.base.Title,
|
|
402
|
+
content: this.state.editTemplateData.versions.base.content,
|
|
403
|
+
};
|
|
404
|
+
if (this.props.location.query.type === 'embedded' && this.props.location.query.module === 'loyalty') {
|
|
405
|
+
if (_.isEqual(this.props.WeChat.selectedWeChatAccount.name, formData['wechat-accounts'])) {
|
|
406
|
+
this.setSelectedTemplateData(selectedTemplate);
|
|
407
|
+
}
|
|
408
|
+
} else {
|
|
409
|
+
const templateTags = this.getTagsFromContent(templateData.content);
|
|
410
|
+
this.prepareWeChatPreviewData(templateData, templateTags);
|
|
400
411
|
}
|
|
412
|
+
} else if (!this.updateSchema) {
|
|
413
|
+
const templateTags = this.getTagsFromContent(selectedTemplate.content);
|
|
414
|
+
this.prepareWeChatPreviewData(selectedTemplate, templateTags);
|
|
401
415
|
} else {
|
|
402
|
-
|
|
403
|
-
this.
|
|
416
|
+
this.updateSchema = false;
|
|
417
|
+
this.setSelectedTemplateData(selectedTemplate);
|
|
404
418
|
}
|
|
405
|
-
} else if (!this.updateSchema) {
|
|
406
|
-
const templateTags = this.getTagsFromContent(selectedTemplate.content);
|
|
407
|
-
this.prepareWeChatPreviewData(selectedTemplate, templateTags);
|
|
408
419
|
} else {
|
|
409
|
-
|
|
410
|
-
this.
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
if (account.configs && account.configs.is_wecrm_enabled) {
|
|
416
|
-
if (account.name === formData['wechat-accounts']) {
|
|
417
|
-
selectedAccount = account;
|
|
420
|
+
let selectedAccount = {};
|
|
421
|
+
_.forEach(this.props.WeChat.weCrmAccounts, (account) => {
|
|
422
|
+
if (account.configs && account.configs.is_wecrm_enabled) {
|
|
423
|
+
if (account.name === formData['wechat-accounts']) {
|
|
424
|
+
selectedAccount = account;
|
|
425
|
+
}
|
|
418
426
|
}
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
}
|
|
423
|
-
}
|
|
427
|
+
});
|
|
428
|
+
this.props.actions.setWeChatAccount(selectedAccount);
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
}
|
|
424
432
|
}
|
|
425
433
|
|
|
426
434
|
onTagSelect(data, currentTab, value) {
|
|
@@ -1037,10 +1045,8 @@ export class MapTemplates extends React.Component { // eslint-disable-line react
|
|
|
1037
1045
|
myField.value += myValue;
|
|
1038
1046
|
}
|
|
1039
1047
|
const formData = _.cloneDeep(this.state.formData);
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
}
|
|
1043
|
-
this.setState({formData});
|
|
1048
|
+
formData[field.id] = myField.value;
|
|
1049
|
+
this.onFormDataChange(formData);
|
|
1044
1050
|
}
|
|
1045
1051
|
|
|
1046
1052
|
internalUrlChecked() {
|
|
@@ -1155,15 +1161,15 @@ export class MapTemplates extends React.Component { // eslint-disable-line react
|
|
|
1155
1161
|
}
|
|
1156
1162
|
|
|
1157
1163
|
hideSchemaElementsByModule(schema) {
|
|
1158
|
-
schema
|
|
1159
|
-
schema
|
|
1160
|
-
schema
|
|
1161
|
-
schema
|
|
1164
|
+
_.set(schema, 'standalone.sections[0].childSections[0].inputFields[0].cols[0].colStyle.display', this.props.location.query.type === 'embedded' ? 'none' : 'block');
|
|
1165
|
+
_.set(schema, 'standalone.sections[0].childSections[0].inputFields[0].cols[1].colStyle.display', this.props.location.query.type === 'embedded' ? 'none' : 'block');
|
|
1166
|
+
_.set(schema, 'standalone.sections[0].childSections[0].inputFields[0].cols[2].colStyle.display', this.props.location.query.type === 'embedded' ? 'none' : 'block');
|
|
1167
|
+
_.set(schema, 'standalone.sections[0].childSections[0].inputFields[0].cols[3].colStyle.display', this.props.location.query.type === 'embedded' ? 'none' : 'block');
|
|
1162
1168
|
|
|
1163
|
-
schema
|
|
1164
|
-
schema
|
|
1169
|
+
_.set(schema, 'standalone.sections[0].childSections[1].childSections[0].childSections[0].inputFields[0].labelStyle.display', this.props.location.query.module === 'loyalty' ? 'block' : 'none');
|
|
1170
|
+
_.set(schema, 'standalone.sections[0].childSections[1].childSections[0].childSections[0].inputFields[0].style.display', this.props.location.query.module === 'loyalty' ? 'block' : 'none');
|
|
1165
1171
|
|
|
1166
|
-
schema
|
|
1172
|
+
_.set(schema, 'standalone.sections[0].childSections[1].childSections[0].childSections[0].inputFields[1].disabled', this.props.params.id && this.props.location.query.module !== 'loyalty');
|
|
1167
1173
|
return schema;
|
|
1168
1174
|
}
|
|
1169
1175
|
|
|
@@ -14,7 +14,7 @@ import { createStructuredSelector } from 'reselect';
|
|
|
14
14
|
import { injectIntl, intlShape, FormattedMessage } from 'react-intl';
|
|
15
15
|
import _ from 'lodash';
|
|
16
16
|
import { Menu, Dropdown } from 'antd';
|
|
17
|
-
import { CapRow, CapColumn, CapButton, CapCard,
|
|
17
|
+
import { CapRow, CapColumn, CapButton, CapCard, CapSpinner } from '@capillarytech/cap-react-ui-library';
|
|
18
18
|
import makeSelectCreate, {makeSelectTemplates, getAssetDetails, getContentAssetDetails} from './selectors';
|
|
19
19
|
import * as actions from './actions';
|
|
20
20
|
import richmediaschema from './richmediaschema';
|
|
@@ -970,7 +970,7 @@ export class Create extends React.Component { // eslint-disable-line react/prefe
|
|
|
970
970
|
}
|
|
971
971
|
return (
|
|
972
972
|
<div className="richmedia-container">
|
|
973
|
-
<
|
|
973
|
+
<CapSpinner spinning={this.state.loading}>
|
|
974
974
|
{this.state.showPreview && <WechatRichmediaTemplatePreview
|
|
975
975
|
show={this.state.showPreview}
|
|
976
976
|
closeSlideBox={this.closeSlideBox}
|
|
@@ -1012,7 +1012,7 @@ export class Create extends React.Component { // eslint-disable-line react/prefe
|
|
|
1012
1012
|
</CapRow>
|
|
1013
1013
|
</div>
|
|
1014
1014
|
</div>
|
|
1015
|
-
</
|
|
1015
|
+
</CapSpinner>
|
|
1016
1016
|
</div>
|
|
1017
1017
|
);
|
|
1018
1018
|
}
|
package/index.html
CHANGED
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
8
8
|
<!-- Allow installing the app to the homescreen -->
|
|
9
9
|
<meta name="mobile-web-app-capable" content="yes">
|
|
10
|
+
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
|
|
11
|
+
<meta http-equiv="Pragma" content="no-cache" />
|
|
12
|
+
<meta http-equiv="Expires" content="0" />
|
|
10
13
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
|
11
14
|
<script src="https://use.typekit.net/ifw1ntv.js"></script>
|
|
12
15
|
<!-- Roboto Font -->
|
package/package.json
CHANGED
package/routes.js
CHANGED
|
@@ -604,7 +604,6 @@ export default function createRoutes(store) {
|
|
|
604
604
|
import('v2Containers/TemplatesV2'),
|
|
605
605
|
import('v2Containers/Cap/reducer'),
|
|
606
606
|
import('v2Containers/Cap/sagas'),
|
|
607
|
-
import('v2Containers/Email/sagas'),
|
|
608
607
|
import('v2Containers/CreativesContainer/reducer'),
|
|
609
608
|
import('v2Containers/Sms/Create/reducer'),
|
|
610
609
|
import('v2Containers/Sms/Create/sagas'),
|
|
@@ -627,7 +626,7 @@ export default function createRoutes(store) {
|
|
|
627
626
|
importModules.then(([reducer,
|
|
628
627
|
sagas, component,
|
|
629
628
|
capReducer, capSagas,
|
|
630
|
-
|
|
629
|
+
creativesContainerReducer,
|
|
631
630
|
smsCreateReducer, smsCreateSaga, smsEditReducer, smsEditSaga,
|
|
632
631
|
emailReducer, emailSaga,
|
|
633
632
|
callTaskReducer, callTaskSagas,
|
|
@@ -648,7 +647,6 @@ export default function createRoutes(store) {
|
|
|
648
647
|
injectSagas(gallerySagas.default);
|
|
649
648
|
injectSagas(sagas.default);
|
|
650
649
|
injectSagas(capSagas.default);
|
|
651
|
-
injectSagas(emailContainerSagas.default);
|
|
652
650
|
injectSagas(smsCreateSaga.default);
|
|
653
651
|
injectSagas(smsEditSaga.default);
|
|
654
652
|
injectSagas(emailSaga.default);
|
|
@@ -109,7 +109,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
109
109
|
}
|
|
110
110
|
if (nextProps.startValidation && nextProps.startValidation !== false && this.props.startValidation !== nextProps.startValidation) {
|
|
111
111
|
this.setState({checkValidation: true});
|
|
112
|
-
this.validateForm(null, null,
|
|
112
|
+
this.validateForm(null, null, true, true, () => {
|
|
113
113
|
//triggering the saveFormData or onSubmit when validation sets isFormValid to TRUE
|
|
114
114
|
if (this.state.isFormValid) {
|
|
115
115
|
this.saveForm(true);
|
|
@@ -789,7 +789,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
789
789
|
androidData[data] = this.state.formData[0][data];
|
|
790
790
|
}
|
|
791
791
|
}
|
|
792
|
-
if(_.isEmpty(androidData) && this.state.currentTab
|
|
792
|
+
if(_.isEmpty(androidData) && this.state.currentTab == 2){
|
|
793
793
|
this.setState({androidValid, iosValid}, () => {
|
|
794
794
|
this.props.setModalContent('ios');
|
|
795
795
|
});
|
|
@@ -804,7 +804,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
804
804
|
iosData[data] = this.state.formData[1][data];
|
|
805
805
|
}
|
|
806
806
|
}
|
|
807
|
-
if(_.isEmpty(iosData) && this.state.currentTab
|
|
807
|
+
if(_.isEmpty(iosData) && this.state.currentTab == 1){
|
|
808
808
|
this.setState({androidValid, iosValid}, () => {
|
|
809
809
|
this.props.setModalContent('android');
|
|
810
810
|
});
|
|
@@ -1879,17 +1879,20 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
1879
1879
|
const that = this;
|
|
1880
1880
|
this.setState({tabKey: `${data}`});
|
|
1881
1881
|
setTimeout(() => {
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1882
|
+
let activeTabIndex = '1';
|
|
1883
|
+
let selector = ".ant-tabs-tab";
|
|
1884
|
+
if (this.props.schema.channel.toUpperCase() === "MOBILEPUSH") {
|
|
1885
|
+
selector = `.mobilepush-wrapper ${selector}`;
|
|
1886
|
+
}
|
|
1887
|
+
const elems = document.querySelectorAll(selector);
|
|
1886
1888
|
|
|
1887
|
-
|
|
1889
|
+
for (let i = 0; i < elems.length; i += 1) {
|
|
1888
1890
|
if (elems.item(i).classList.contains("ant-tabs-tab-active")) {
|
|
1889
1891
|
activeTabIndex = i + 1;
|
|
1890
1892
|
}
|
|
1891
1893
|
}
|
|
1892
|
-
|
|
1894
|
+
if (this.props.isNewVersionFlow) {
|
|
1895
|
+
const formData = _.cloneDeep(this.state.formData);
|
|
1893
1896
|
formData[(this.state.currentTab - 1)].activeTab = formData[(this.state.currentTab - 1)].selectedLanguages[activeTabIndex - 1];
|
|
1894
1897
|
formData[(this.state.currentTab - 1)].tabKey = `${data}`;
|
|
1895
1898
|
if (formData[(this.state.currentTab - 1)].base) {
|
|
@@ -1901,15 +1904,6 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
1901
1904
|
val.injectedEvents[event].call(that.props.parent, this.state.currentTab, formData);
|
|
1902
1905
|
});
|
|
1903
1906
|
} else {
|
|
1904
|
-
let activeTabIndex = '1';
|
|
1905
|
-
const elems = document.getElementsByClassName("ant-tabs-tab");
|
|
1906
|
-
|
|
1907
|
-
for (let i = 0; i < elems.length; i += 1) {
|
|
1908
|
-
if (elems.item(i).classList.contains("ant-tabs-tab-active")) {
|
|
1909
|
-
activeTabIndex = i + 1;
|
|
1910
|
-
}
|
|
1911
|
-
}
|
|
1912
|
-
|
|
1913
1907
|
that.setState({currentTab: activeTabIndex});
|
|
1914
1908
|
val.injectedEvents[event].call(that.props.parent, activeTabIndex);
|
|
1915
1909
|
}
|
|
@@ -120,6 +120,10 @@ class NavigationBar extends React.Component {
|
|
|
120
120
|
return productsList;
|
|
121
121
|
};
|
|
122
122
|
|
|
123
|
+
setDefaultSelectedProduct = () => {
|
|
124
|
+
const { intl, campaignOrgV2Status } = this.props;
|
|
125
|
+
return campaignOrgV2Status ? intl.formatMessage(messages.selectedProductDefaultEngage) : intl.formatMessage(messages.selectedProductDefaultCampaigns);
|
|
126
|
+
}
|
|
123
127
|
getTopbarIcons = () => [
|
|
124
128
|
{
|
|
125
129
|
iconType: 'help',
|
|
@@ -176,7 +180,6 @@ class NavigationBar extends React.Component {
|
|
|
176
180
|
const {
|
|
177
181
|
topbarMenuData,
|
|
178
182
|
loggedIn,
|
|
179
|
-
intl,
|
|
180
183
|
type,
|
|
181
184
|
} = this.props;
|
|
182
185
|
const productsList = this.getProductsList();
|
|
@@ -192,9 +195,8 @@ class NavigationBar extends React.Component {
|
|
|
192
195
|
<TopBar
|
|
193
196
|
productsList={productsList}
|
|
194
197
|
selectedProduct={
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
}
|
|
198
|
+
selectedProduct || this.setDefaultSelectedProduct()
|
|
199
|
+
}
|
|
198
200
|
handleProductChange={this.handleProductChange}
|
|
199
201
|
proxyOrgList={proxyOrgList}
|
|
200
202
|
selectedOrg={selectedOrg}
|
|
@@ -230,6 +232,7 @@ NavigationBar.propTypes = {
|
|
|
230
232
|
intl: intlShape.isRequired,
|
|
231
233
|
location: PropTypes.object,
|
|
232
234
|
type: PropTypes.string,
|
|
235
|
+
campaignOrgV2Status: PropTypes.bool,
|
|
233
236
|
};
|
|
234
237
|
|
|
235
238
|
export default injectIntl(NavigationBar);
|
|
@@ -13,8 +13,12 @@ export default defineMessages({
|
|
|
13
13
|
id: `${scope}.header`,
|
|
14
14
|
defaultMessage: 'This is the NavigationBar component!',
|
|
15
15
|
},
|
|
16
|
-
|
|
17
|
-
id: `${scope}.
|
|
16
|
+
selectedProductDefaultEngage: {
|
|
17
|
+
id: `${scope}.selectedProductDefaultEngage`,
|
|
18
|
+
defaultMessage: 'Engage+',
|
|
19
|
+
},
|
|
20
|
+
selectedProductDefaultCampaigns: {
|
|
21
|
+
id: `${scope}.selectedProductDefaultCampaigns`,
|
|
18
22
|
defaultMessage: 'Campaigns',
|
|
19
23
|
},
|
|
20
24
|
});
|
|
@@ -157,7 +157,7 @@ export class Cap extends React.Component { // eslint-disable-line react/prefer-s
|
|
|
157
157
|
|
|
158
158
|
render() {
|
|
159
159
|
const { Global, location } = this.props;
|
|
160
|
-
const { topbarMenuData, isLoggedIn } = Global;
|
|
160
|
+
const { topbarMenuData, isLoggedIn, currentOrgDetails } = Global;
|
|
161
161
|
const topbarMenuDataOptions = topbarMenuData && topbarMenuData.data ? topbarMenuData.data : [];
|
|
162
162
|
const type = this.props.location.query.type;
|
|
163
163
|
const toastMessages = this.props.Global.messages;
|
|
@@ -183,6 +183,7 @@ export class Cap extends React.Component { // eslint-disable-line react/prefer-s
|
|
|
183
183
|
loggedIn={isLoggedIn}
|
|
184
184
|
topbarMenuData={topbarMenuDataOptions}
|
|
185
185
|
location={location}
|
|
186
|
+
campaignOrgV2Status={currentOrgDetails.org_campaign_v2_status}
|
|
186
187
|
/> : ''}
|
|
187
188
|
<div className="main" style={{minHeight: 'calc(100vh - 74px', position: 'relative', top: '74px'}}>
|
|
188
189
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import styled from 'styled-components';
|
|
4
|
+
import get from 'lodash/get';
|
|
4
5
|
import TemplatesV2 from '../TemplatesV2';
|
|
5
6
|
import TemplatePreview from '../../v2Components/TemplatePreview';
|
|
6
7
|
import SmsCreate from '../Sms/Create';
|
|
@@ -98,7 +99,8 @@ function SlideBoxContent(props) {
|
|
|
98
99
|
)}
|
|
99
100
|
{isPreview && (
|
|
100
101
|
<TemplatePreview
|
|
101
|
-
content={templateData
|
|
102
|
+
content={get(templateData, `versions.base['sms-editor']`)}
|
|
103
|
+
unicodeEnabled={get(templateData, `versions.base['unicode-validity']`)}
|
|
102
104
|
channel={templateData.type.toLowerCase()}
|
|
103
105
|
charCounterEnabled
|
|
104
106
|
templateData={templateData}
|
|
@@ -211,6 +213,7 @@ function SlideBoxContent(props) {
|
|
|
211
213
|
templateData={templateData}
|
|
212
214
|
showTemplateName={showTemplateName}
|
|
213
215
|
getDefaultTags={type}
|
|
216
|
+
onValidationFail={onValidationFail}
|
|
214
217
|
/>
|
|
215
218
|
}
|
|
216
219
|
{isCreateMPush &&
|
|
@@ -232,7 +235,8 @@ function SlideBoxContent(props) {
|
|
|
232
235
|
cap={cap}
|
|
233
236
|
onResetStep={onResetStep}
|
|
234
237
|
showTemplateName={showTemplateName}
|
|
235
|
-
query={query}
|
|
238
|
+
query={query}
|
|
239
|
+
onValidationFail={onValidationFail}/>
|
|
236
240
|
}
|
|
237
241
|
</CreativesWrapper>
|
|
238
242
|
);
|