@capillarytech/creatives-library 7.17.92-alpha.0 → 7.17.92
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/containers/Ebill/index.js +1 -0
- package/containers/MobilePush/Edit/index.js +1 -0
- package/index.js +6 -0
- package/package.json +1 -1
- package/routes.js +5 -0
- package/services/api.js +5 -0
- package/v2Components/CapDeviceContent/index.js +338 -0
- package/v2Components/CapDeviceContent/index.scss +115 -0
- package/v2Components/CapDeviceContent/messages.js +107 -0
- package/v2Components/CapDeviceContent/tests/index.test.js +75 -0
- package/v2Components/CapImageUpload/index.js +10 -3
- package/v2Components/CapImageUpload/messages.js +4 -0
- package/v2Components/CapInAppCTA/constants.js +25 -0
- package/v2Components/CapInAppCTA/index.js +281 -0
- package/v2Components/CapInAppCTA/index.scss +93 -0
- package/v2Components/CapInAppCTA/messages.js +85 -0
- package/v2Components/FormBuilder/index.js +3 -4
- package/v2Components/MobilePushPreviewV2/index.js +81 -23
- package/v2Components/TemplatePreview/_templatePreview.scss +448 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_android_bottom.svg +11 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_android_full.svg +11 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_android_modal.svg +11 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_android_top.svg +11 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_ios_bottom.svg +6 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_ios_full.svg +18 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_ios_modal.svg +7 -0
- package/v2Components/TemplatePreview/assets/images/inapp_mobile_ios_top.svg +13 -0
- package/v2Components/TemplatePreview/index.js +660 -375
- package/v2Components/TemplatePreview/messages.js +4 -0
- package/v2Containers/App/constants.js +1 -0
- package/v2Containers/CreativesContainer/SlideBoxContent.js +43 -0
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +4 -1
- package/v2Containers/CreativesContainer/constants.js +1 -0
- package/v2Containers/CreativesContainer/index.js +94 -27
- package/v2Containers/CreativesContainer/messages.js +4 -0
- package/v2Containers/InApp/actions.js +64 -0
- package/v2Containers/InApp/constants.js +95 -0
- package/v2Containers/InApp/index.js +745 -0
- package/v2Containers/InApp/index.scss +47 -0
- package/v2Containers/InApp/messages.js +86 -0
- package/v2Containers/InApp/reducer.js +109 -0
- package/v2Containers/InApp/sagas.js +143 -0
- package/v2Containers/InApp/selectors.js +12 -0
- package/v2Containers/InApp/tests/action.test.js +53 -0
- package/v2Containers/InApp/tests/index.test.js +152 -0
- package/v2Containers/InApp/tests/mockData.js +897 -0
- package/v2Containers/InApp/tests/reducer.test.js +177 -0
- package/v2Containers/InApp/tests/sagas.test.js +391 -0
- package/v2Containers/MobilePush/Edit/index.js +3 -1
- package/v2Containers/Templates/_templates.scss +10 -0
- package/v2Containers/Templates/index.js +103 -23
- package/v2Containers/Templates/messages.js +20 -0
- package/v2Containers/TemplatesV2/index.js +8 -2
- package/v2Containers/TemplatesV2/messages.js +4 -0
|
@@ -53,6 +53,7 @@ import {
|
|
|
53
53
|
import { makeSelectTemplates, makeSelectTemplatesResponse } from './selectors';
|
|
54
54
|
import { makeSelectCreate as makeSelectCreateSms} from '../Sms/Create/selectors';
|
|
55
55
|
import { makeSelectCreate as makeSelectCreateMobilePush } from '../MobilePush/Create/selectors';
|
|
56
|
+
import { makeSelectInApp } from '../InApp/selectors';
|
|
56
57
|
import { makeSelectEbill as makeSelectCreateEbill } from '../Ebill/selectors';
|
|
57
58
|
import { makeSelectEmail as makeSelectCreateEmail } from '../Email/selectors';
|
|
58
59
|
import { makeSelectEdit } from '../Sms/Edit/selectors';
|
|
@@ -66,6 +67,7 @@ import {checkUnicode} from '../../utils/smsCharCountV2';
|
|
|
66
67
|
import * as actions from './actions';
|
|
67
68
|
import * as smsActions from '../Sms/Create/actions';
|
|
68
69
|
import * as mobilepushActions from '../MobilePush/Create/actions';
|
|
70
|
+
import * as inAppActions from '../InApp/actions';
|
|
69
71
|
import * as smsEditActions from '../Sms/Edit/actions';
|
|
70
72
|
import * as ebillActions from '../Ebill/actions';
|
|
71
73
|
import * as emailActions from '../Email/actions';
|
|
@@ -113,7 +115,7 @@ import zaloMessages from '../Zalo/messages';
|
|
|
113
115
|
import globalMessages from '../../v2Containers/Cap/messages';
|
|
114
116
|
import { handlePreviewInNewTab } from '../../utils/common';
|
|
115
117
|
|
|
116
|
-
import { MOBILE_PUSH, WECHAT, SMS, EMAIL, EBILL, LINE, VIBER, FACEBOOK, WHATSAPP, RCS, ZALO } from '../CreativesContainer/constants';
|
|
118
|
+
import { MOBILE_PUSH, WECHAT, SMS, EMAIL, EBILL, LINE, VIBER, FACEBOOK, WHATSAPP, RCS, ZALO, INAPP } from '../CreativesContainer/constants';
|
|
117
119
|
|
|
118
120
|
import {CREATIVE} from '../Facebook/constants';
|
|
119
121
|
import videoPlay from '../../assets/videoPlay.svg';
|
|
@@ -123,9 +125,11 @@ import pushIllustration from '../Assets/images/pushIllustration.svg';
|
|
|
123
125
|
import whatsappIllustration from '../Assets/images/whatsappIllustration.png';
|
|
124
126
|
import rcsIllustration from '../Assets/images/rcsIllustration.png';
|
|
125
127
|
import zaloillustration from '@capillarytech/cap-ui-library/assets/images/featureUiNotEnabledIllustration.svg';
|
|
128
|
+
import inAppIllustration from '@capillarytech/cap-ui-library/assets/images/featureUiNotEnabledIllustration.svg';
|
|
126
129
|
|
|
127
130
|
import { CAP_SPACE_16 } from '@capillarytech/cap-ui-library/styled/variables';
|
|
128
131
|
import { GA } from '@capillarytech/cap-ui-utils';
|
|
132
|
+
import { MAPP_SDK } from '../InApp/constants';
|
|
129
133
|
const { timeTracker } = GA;
|
|
130
134
|
const {CapCustomCardList} = CapCustomCard;
|
|
131
135
|
const InlineDiv = styled.div`
|
|
@@ -166,6 +170,7 @@ const WHATSAPP_LOWERCASE = WHATSAPP.toLowerCase();
|
|
|
166
170
|
const RCS_LOWERCASE = RCS.toLowerCase();
|
|
167
171
|
const SMS_LOWERCASE = SMS.toLowerCase();
|
|
168
172
|
const MOBILE_PUSH_LOWERCASE = MOBILE_PUSH.toLowerCase();
|
|
173
|
+
const INAPP_LOWERCASE = INAPP.toLowerCase();
|
|
169
174
|
const EBILL_LOWERCASE = EBILL.toLowerCase();
|
|
170
175
|
const LINE_LOWERCASE = LINE.toLowerCase();
|
|
171
176
|
const ZALO_LOWERCASE = ZALO.toLowerCase();
|
|
@@ -248,6 +253,11 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
248
253
|
activeMode = ACCOUNT_SELECTION_MODE;
|
|
249
254
|
this.props.actions.getWeCrmAccounts(channel);
|
|
250
255
|
break;
|
|
256
|
+
case INAPP:
|
|
257
|
+
channel = INAPP
|
|
258
|
+
activeMode = ACCOUNT_SELECTION_MODE;
|
|
259
|
+
this.props.actions.getWeCrmAccounts(MAPP_SDK);
|
|
260
|
+
break;
|
|
251
261
|
case WECHAT:
|
|
252
262
|
channel = 'wechat';
|
|
253
263
|
activeMode = ACCOUNT_SELECTION_MODE;
|
|
@@ -317,7 +327,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
317
327
|
|
|
318
328
|
// opening the create slidebox based on query params
|
|
319
329
|
const queryItems = getObjFromQueryParams(location.search);
|
|
320
|
-
if (queryItems.channel
|
|
330
|
+
if ([INAPP_LOWERCASE, WHATSAPP_LOWERCASE].includes(queryItems.channel) && queryItems.mode === CREATE) {
|
|
321
331
|
this.createTemplate();
|
|
322
332
|
}
|
|
323
333
|
|
|
@@ -368,6 +378,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
368
378
|
this.setState({defaultAccount: true});
|
|
369
379
|
channel = "mobilepush";
|
|
370
380
|
nextProps.actions.getWeCrmAccounts(channel);
|
|
381
|
+
} else if (nextProps.route.name === INAPP ) {
|
|
382
|
+
this.setState({defaultAccount: true});
|
|
383
|
+
channel = INAPP_LOWERCASE;
|
|
384
|
+
nextProps.actions.getWeCrmAccounts(channel);
|
|
371
385
|
} else if (nextProps.route.name.toLowerCase() === 'ebill') {
|
|
372
386
|
channel = 'Ebill';
|
|
373
387
|
} else if (nextProps.route.name.toLowerCase() === 'line') {
|
|
@@ -393,7 +407,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
393
407
|
params.wecrmToken = (nextProps.Templates.selectedWeChatAccount.configs || {}).wecrm_token;
|
|
394
408
|
params.originalId = nextProps.Templates.selectedWeChatAccount.sourceAccountIdentifier;
|
|
395
409
|
}
|
|
396
|
-
if (this.state.channel.toLowerCase() === "mobilepush" && !isEmpty(nextProps.Templates.selectedWeChatAccount)) {
|
|
410
|
+
if (this.state.channel.toLowerCase() === "mobilepush" || this.state.channel.toLowerCase() === INAPP_LOWERCASE && !isEmpty(nextProps.Templates.selectedWeChatAccount)) {
|
|
397
411
|
params.accountId = nextProps.Templates.selectedWeChatAccount.id;
|
|
398
412
|
}
|
|
399
413
|
this.getAllTemplates({params}, true);
|
|
@@ -405,7 +419,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
405
419
|
params.wecrmToken = (nextProps.Templates.selectedWeChatAccount.configs || {}).wecrm_token;
|
|
406
420
|
params.originalId = nextProps.Templates.selectedWeChatAccount.sourceAccountIdentifier;
|
|
407
421
|
}
|
|
408
|
-
if ((this.state.channel || '').toLowerCase() === "mobilepush" && nextProps.Templates.selectedWeChatAccount) {
|
|
422
|
+
if ((this.state.channel || '').toLowerCase() === "mobilepush" || (this.state.channel || '').toLowerCase() === INAPP_LOWERCASE && nextProps.Templates.selectedWeChatAccount) {
|
|
409
423
|
params.accountId = nextProps.Templates.selectedWeChatAccount.id;
|
|
410
424
|
}
|
|
411
425
|
const selectedChannel = this.state.channel.toLowerCase();
|
|
@@ -451,7 +465,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
451
465
|
}
|
|
452
466
|
}
|
|
453
467
|
|
|
454
|
-
if (
|
|
468
|
+
if (['wechat' , 'mobilepush', INAPP_LOWERCASE].includes(selectedChannel) && isEmpty(nextProps.Templates.selectedWeChatAccount) && (this.props.location.query.type === 'embedded') && !this.isEnabledInLibraryModule("showAccountSelection")) {
|
|
455
469
|
let selectedAccount = '';
|
|
456
470
|
if (isEmpty(nextProps.Templates.weCrmAccounts)) {
|
|
457
471
|
return;
|
|
@@ -481,10 +495,18 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
481
495
|
params.accountId = Number(nextProps.location.query.account_id);
|
|
482
496
|
this.getAllTemplates({params});
|
|
483
497
|
}
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
498
|
+
else if (selectedChannel === INAPP_LOWERCASE && (nextProps.location.query.account_id || nextProps.location.query.source_account_id)) {
|
|
499
|
+
forEach(nextProps.Templates.weCrmAccounts, (account) => {
|
|
500
|
+
if ((nextProps.location.query.account_id && account.id === Number(nextProps.location.query.account_id)) || (nextProps.location.query.source_account_id && account.sourceAccountIdentifier && account.sourceAccountIdentifier === nextProps.location.query.source_account_id)) {
|
|
501
|
+
selectedAccount = account;
|
|
502
|
+
}
|
|
503
|
+
});
|
|
504
|
+
this.props.actions.setWeChatAccount(selectedAccount);
|
|
505
|
+
params.accountId = Number(nextProps.location.query.account_id);
|
|
506
|
+
this.getAllTemplates({params});
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
488
510
|
|
|
489
511
|
if (selectedChannel === "ebill" && nextProps.CreateEbill && nextProps.CreateEbill.createResponse && nextProps.CreateEbill.createResponse.templateId && nextProps.CreateEbill.createResponse.templateId !== '') {
|
|
490
512
|
const message = `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`;
|
|
@@ -513,7 +535,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
513
535
|
if ((this.state.channel || '').toLowerCase() !== "sms") {
|
|
514
536
|
CapNotification.error({key: 'somethingWrong', message});
|
|
515
537
|
}
|
|
516
|
-
const { smsActions, mobilepushActions, ebillActions, lineActions, viberActions, facebookActions, whatsappActions, rcsActions } = this.props;
|
|
538
|
+
const { smsActions, mobilepushActions, ebillActions, lineActions, viberActions, facebookActions, whatsappActions, inAppActions, rcsActions } = this.props;
|
|
517
539
|
switch (selectedChannel) {
|
|
518
540
|
case SMS_LOWERCASE:
|
|
519
541
|
smsActions.clearCreateResponse();
|
|
@@ -539,6 +561,9 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
539
561
|
case RCS_LOWERCASE:
|
|
540
562
|
rcsActions.clearCreateResponse();
|
|
541
563
|
break;
|
|
564
|
+
case inAppActions:
|
|
565
|
+
inAppActions.clearCreateResponse();
|
|
566
|
+
break;
|
|
542
567
|
default:
|
|
543
568
|
break;
|
|
544
569
|
}
|
|
@@ -653,7 +678,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
653
678
|
params.wecrmToken = this.props.Templates.weCrmAccounts[findIndex(this.props.Templates.weCrmAccounts, { name: value})].configs.wecrm_token;
|
|
654
679
|
this.props.actions.setWeChatAccount(this.props.Templates.weCrmAccounts[findIndex(this.props.Templates.weCrmAccounts, { name: value})]);
|
|
655
680
|
params.originalId = this.props.Templates.weCrmAccounts[findIndex(this.props.Templates.weCrmAccounts, { name: value})].sourceAccountIdentifier;
|
|
656
|
-
} else if (selectedChannel === 'mobilepush') {
|
|
681
|
+
} else if (selectedChannel === 'mobilepush' || selectedChannel === INAPP_LOWERCASE) {
|
|
657
682
|
this.props.actions.setWeChatAccount(this.props.Templates.weCrmAccounts[findIndex(this.props.Templates.weCrmAccounts, { name: value})]);
|
|
658
683
|
const account = this.props.Templates.weCrmAccounts[findIndex(this.props.Templates.weCrmAccounts, { name: value})];
|
|
659
684
|
params.accountId = account.id;
|
|
@@ -816,6 +841,12 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
816
841
|
queryParams.mode = this.state.mode.toLowerCase();
|
|
817
842
|
}
|
|
818
843
|
}
|
|
844
|
+
if (this.state.channel.toLowerCase() === INAPP_LOWERCASE && !isEmpty(this.props.Templates.selectedWeChatAccount)) {
|
|
845
|
+
queryParams.accountId = this.props.Templates.selectedWeChatAccount.id;
|
|
846
|
+
if (this.state.mode) {
|
|
847
|
+
queryParams.mode = this.state.mode.toLowerCase();
|
|
848
|
+
}
|
|
849
|
+
}
|
|
819
850
|
}
|
|
820
851
|
if ((this.state.channel || '').toLowerCase() === SMS_LOWERCASE && isTraiDltFeature) {
|
|
821
852
|
queryParams.traiEnable = true;
|
|
@@ -1066,6 +1097,9 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1066
1097
|
case MOBILE_PUSH:
|
|
1067
1098
|
templateData.content = template;
|
|
1068
1099
|
break;
|
|
1100
|
+
case INAPP:
|
|
1101
|
+
templateData.content = template;
|
|
1102
|
+
break;
|
|
1069
1103
|
case WECHAT:
|
|
1070
1104
|
templateData.content = this.prepareWeChatPreviewData(template);
|
|
1071
1105
|
break;
|
|
@@ -1271,9 +1305,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1271
1305
|
const showWhatsappIllustration = !isEmpty(this.props.Templates.selectedWhatsappAccount) && [WHATSAPP_LOWERCASE].includes(channelLowerCase);
|
|
1272
1306
|
const showZaloIllustration = !isEmpty(this.props.Templates.selectedZaloAccount) && [ZALO_LOWERCASE].includes(channelLowerCase);
|
|
1273
1307
|
const showRcsIllustration = channelLowerCase === RCS_LOWERCASE && isEmpty(templates);
|
|
1308
|
+
const showInAppIllustration = channelLowerCase === INAPP_LOWERCASE && isEmpty(templates);
|
|
1274
1309
|
const noLoaderAndSearchText = isEmpty(this.state.searchText) && !isLoading;
|
|
1275
1310
|
return (<div>
|
|
1276
|
-
{[WECHAT, MOBILE_PUSH].includes(currentChannel) && this.showAccountName()}
|
|
1311
|
+
{[WECHAT, MOBILE_PUSH, INAPP].includes(currentChannel) && this.showAccountName()}
|
|
1277
1312
|
{filterContent}
|
|
1278
1313
|
{[WHATSAPP, ZALO].includes(currentChannel) && this.selectedFilters()}
|
|
1279
1314
|
<CapSpin spinning={isLoading} tip={loadingTip} style={{width: '100%'}}>
|
|
@@ -1291,13 +1326,13 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1291
1326
|
: ['sms', "email"].includes(this.state.channel.toLowerCase()) && !isLoading && this.getSmsEmailIllustration()
|
|
1292
1327
|
}
|
|
1293
1328
|
|
|
1294
|
-
{(this.state.selectedAccount === '' && isEmpty(this.props.Templates.selectedWeChatAccount)) && (this.state.channel.toLowerCase() === 'wechat' || this.state.channel.toLowerCase() === "mobilepush") &&
|
|
1329
|
+
{(this.state.selectedAccount === '' && isEmpty(this.props.Templates.selectedWeChatAccount)) && (this.state.channel.toLowerCase() === 'wechat' || this.state.channel.toLowerCase() === "mobilepush" || this.state.channel.toLowerCase() === INAPP_LOWERCASE) &&
|
|
1295
1330
|
<div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh' }}>
|
|
1296
1331
|
<CapHeading type="h6">{accounts ? this.props.intl.formatMessage(messages.noAccountMessage) : this.props.intl.formatMessage(messages.noAccountsPresent)}</CapHeading>
|
|
1297
1332
|
</div>
|
|
1298
1333
|
}
|
|
1299
1334
|
|
|
1300
|
-
{ !isEmpty(this.props.Templates.selectedWeChatAccount) && ["mobilepush"].includes(this.state.channel.toLowerCase()) && this.state.selectedAccountError ?
|
|
1335
|
+
{ !isEmpty(this.props.Templates.selectedWeChatAccount) && ["mobilepush", INAPP_LOWERCASE].includes(this.state.channel.toLowerCase()) && this.state.selectedAccountError ?
|
|
1301
1336
|
<div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh'}}>
|
|
1302
1337
|
<CapHeading type="h6" >
|
|
1303
1338
|
{this.props.intl.formatMessage(messages.accountConfigError)}
|
|
@@ -1331,6 +1366,14 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1331
1366
|
</div>
|
|
1332
1367
|
)
|
|
1333
1368
|
}
|
|
1369
|
+
{showInAppIllustration &&
|
|
1370
|
+
(
|
|
1371
|
+
noLoaderAndSearchText &&
|
|
1372
|
+
<div style={this.isFullMode() ? { height: "calc(100vh - 325px)", overflow: 'auto' } : {}}>
|
|
1373
|
+
<CapIllustration buttonClassName={`create-new-${channelLowerCase}`} {...this.getChannelTypeIllustrationInfo(currentChannel)} />
|
|
1374
|
+
</div>
|
|
1375
|
+
)
|
|
1376
|
+
}
|
|
1334
1377
|
</div>
|
|
1335
1378
|
}
|
|
1336
1379
|
</CapSpin>
|
|
@@ -1363,7 +1406,13 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1363
1406
|
pathname: `/mobilepush/edit/${e.template_id}`,
|
|
1364
1407
|
query: type === 'embedded' ? {type: 'embedded', module, account_id: e.account_id } : {},
|
|
1365
1408
|
};
|
|
1366
|
-
} else if (this.state.channel.toLowerCase() ===
|
|
1409
|
+
} else if (this.state.channel.toLowerCase() === INAPP_LOWERCASE) {
|
|
1410
|
+
routeParams = {
|
|
1411
|
+
pathname: `/inapp/edit/${e.template_id}`,
|
|
1412
|
+
query: type === 'embedded' ? {type: 'embedded', module, account_id: e.account_id } : {},
|
|
1413
|
+
};
|
|
1414
|
+
}
|
|
1415
|
+
else if (this.state.channel.toLowerCase() === 'wechat') {
|
|
1367
1416
|
if (e.template_type && e.template_type === 'RICHMEDIA_WECHAT_TEMPLATE') {
|
|
1368
1417
|
this.props.router.push({
|
|
1369
1418
|
pathname: `/wechat/richmedia/edit/${e.template_id}`,
|
|
@@ -1796,6 +1845,14 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1796
1845
|
this.getAllTemplates({params: {}}, true);
|
|
1797
1846
|
this.props.mobilepushActions.clearCreateResponse();
|
|
1798
1847
|
});
|
|
1848
|
+
} else if (this.state.channel.toLowerCase() === "inapp") {
|
|
1849
|
+
duplicateObj.definition.accountId = this.props.Templates.selectedWeChatAccount.id;
|
|
1850
|
+
this.props.inAppActions.createInAppTemplate(duplicateObj, () => {
|
|
1851
|
+
const message = `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`;
|
|
1852
|
+
CapNotification.success({key: 'duplicateSuccess', message});
|
|
1853
|
+
this.getAllTemplates({params: {}}, true);
|
|
1854
|
+
this.props.inAppActions.clearCreateResponse();
|
|
1855
|
+
});
|
|
1799
1856
|
} else if (this.state.channel.toLowerCase() === "ebill") {
|
|
1800
1857
|
this.props.ebillActions.createTemplate(duplicateObj);
|
|
1801
1858
|
} else if (this.state.channel.toLowerCase() === "email") {
|
|
@@ -1918,6 +1975,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1918
1975
|
pathName = `/zalo/edit/${id}/`;
|
|
1919
1976
|
break;
|
|
1920
1977
|
}
|
|
1978
|
+
case INAPP: {
|
|
1979
|
+
pathName = `/inapp/edit/${id}/`;
|
|
1980
|
+
break;
|
|
1981
|
+
}
|
|
1921
1982
|
default:
|
|
1922
1983
|
break;
|
|
1923
1984
|
}
|
|
@@ -2206,7 +2267,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
2206
2267
|
if (this.props.location.query.type === "embedded" && this.props.location.query.module === "library") {
|
|
2207
2268
|
switch (property) {
|
|
2208
2269
|
case "showAccountSelection":
|
|
2209
|
-
return (this.props.route && (['wechat', 'mobilepush', WHATSAPP_LOWERCASE].includes(this.props.route.name.toLowerCase())));
|
|
2270
|
+
return (this.props.route && (['wechat', 'mobilepush', WHATSAPP_LOWERCASE, INAPP_LOWERCASE].includes(this.props.route.name.toLowerCase())));
|
|
2210
2271
|
case "setLocale":
|
|
2211
2272
|
return true;
|
|
2212
2273
|
case "callCreateFromProps":
|
|
@@ -2346,6 +2407,15 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
2346
2407
|
descriptionClassName: 'illustration-desc zalo-illustration',
|
|
2347
2408
|
buttonClassName: "zalo-illustration-button",
|
|
2348
2409
|
};
|
|
2410
|
+
case INAPP:
|
|
2411
|
+
return {
|
|
2412
|
+
illustrationImage: inAppIllustration,
|
|
2413
|
+
title: <FormattedMessage {...messages.inAppTitleIllustration} />,
|
|
2414
|
+
description: <FormattedMessage {...messages.inAppDescIllustration} />,
|
|
2415
|
+
descriptionPosition: 'bottom',
|
|
2416
|
+
descriptionClassName: 'illustration-desc inapp-illustration',
|
|
2417
|
+
buttonClassName: "inapp-illustration-button",
|
|
2418
|
+
}
|
|
2349
2419
|
default:
|
|
2350
2420
|
return {};
|
|
2351
2421
|
}
|
|
@@ -2401,24 +2471,25 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
2401
2471
|
const { weCrmAccounts = [], fetchingWeCrmAccounts = false, campaignSettings = {} } = templates;
|
|
2402
2472
|
const isWechatChannel = channel === WECHAT;
|
|
2403
2473
|
const isMobilePushChannel = channel === MOBILE_PUSH;
|
|
2474
|
+
const isInAppChannel = channel === INAPP;
|
|
2404
2475
|
const isFacebookChannel = channel === FACEBOOK;
|
|
2405
2476
|
|
|
2406
|
-
if ([WECHAT, MOBILE_PUSH, LINE, ZALO].includes(channel) && !isEmpty(weCrmAccounts) && !isFacebookChannel) {
|
|
2477
|
+
if ([WECHAT, MOBILE_PUSH, INAPP, LINE, ZALO].includes(channel) && !isEmpty(weCrmAccounts) && !isFacebookChannel) {
|
|
2407
2478
|
forEach(weCrmAccounts, (account) => {
|
|
2408
|
-
if ((isWechatChannel && account.configs && account.configs.is_wecrm_enabled) || [MOBILE_PUSH, LINE, ZALO].includes(channel)) {
|
|
2479
|
+
if ((isWechatChannel && account.configs && account.configs.is_wecrm_enabled) || [MOBILE_PUSH, INAPP, LINE, ZALO].includes(channel)) {
|
|
2409
2480
|
if (query.type === 'embedded' && (!query.module || (query.module && query.module !== 'library'))) {
|
|
2410
2481
|
if (query.source_account_id && account.sourceAccountIdentifier === query.source_account_id) {
|
|
2411
2482
|
accountOptions.push(
|
|
2412
|
-
{ key: isMobilePushChannel ? account.id : account.uuid,
|
|
2483
|
+
{ key: isMobilePushChannel || isInAppChannel ? account.id : account.uuid,
|
|
2413
2484
|
title: account.name,
|
|
2414
2485
|
value: account.name,
|
|
2415
2486
|
icon: <CapIcon.CapIconAvatar text={account.name[0]} width="auto" height="2rem"/>,
|
|
2416
2487
|
}
|
|
2417
2488
|
);
|
|
2418
|
-
} else if (query.module && (isWechatChannel || isMobilePushChannel)) {
|
|
2489
|
+
} else if (query.module && (isWechatChannel || isMobilePushChannel || isInAppChannel)) {
|
|
2419
2490
|
accountOptions.push(
|
|
2420
2491
|
{
|
|
2421
|
-
key: isMobilePushChannel ? account.id : account.uuid,
|
|
2492
|
+
key: isMobilePushChannel || isInAppChannel ? account.id : account.uuid,
|
|
2422
2493
|
value: account.name,
|
|
2423
2494
|
title: account.name,
|
|
2424
2495
|
icon: <CapIcon.CapIconAvatar text={account.name[0]} width="auto" height="2rem"/>,
|
|
@@ -2428,7 +2499,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
2428
2499
|
} else {
|
|
2429
2500
|
accountOptions.push(
|
|
2430
2501
|
{
|
|
2431
|
-
key: isMobilePushChannel ? account.id : account.uuid,
|
|
2502
|
+
key: isMobilePushChannel || isInAppChannel ? account.id : account.uuid,
|
|
2432
2503
|
value: account.name,
|
|
2433
2504
|
title: account.name,
|
|
2434
2505
|
icon: <CapIcon.CapIconAvatar text={account.name[0]} width="auto" height="2rem"/>,
|
|
@@ -2451,6 +2522,11 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
2451
2522
|
noAccountHeader = messages.noAccountsPresent;
|
|
2452
2523
|
break;
|
|
2453
2524
|
}
|
|
2525
|
+
case INAPP: {
|
|
2526
|
+
accountHeader = formatMessage(messages.inappAccount);
|
|
2527
|
+
noAccountHeader = messages.noAccountsPresentInApp;
|
|
2528
|
+
break;
|
|
2529
|
+
}
|
|
2454
2530
|
case WECHAT: {
|
|
2455
2531
|
accountHeader = formatMessage(messages.wechatAccount);
|
|
2456
2532
|
noAccountHeader = messages.noAccountsPresentWeChat;
|
|
@@ -2548,6 +2624,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
2548
2624
|
[MOBILE_PUSH]: 'mobilepushAccount',
|
|
2549
2625
|
[WECHAT]: 'wechatAccount',
|
|
2550
2626
|
[WHATSAPP]: 'whatsappAccount',
|
|
2627
|
+
[INAPP]: 'inappAccount',
|
|
2551
2628
|
[ZALO]: 'zaloAccount',
|
|
2552
2629
|
};
|
|
2553
2630
|
return formatMessage(messages[channelObj[channel?.toUpperCase()]]);
|
|
@@ -2733,7 +2810,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
2733
2810
|
const showWhatsappCountWarning = templatesCount >= WARNING_WHATSAPP_TEMPLATES;
|
|
2734
2811
|
const whatsappCountExceedText = <FormattedMessage {...messages.whatsappMaxTemplates} values={{ maxCount: MAX_WHATSAPP_TEMPLATES }}/>;
|
|
2735
2812
|
|
|
2736
|
-
const filterContent = (( isfilterContentVisisble || [WECHAT, MOBILE_PUSH].includes(this.state.channel.toUpperCase())) && <div className="action-container">
|
|
2813
|
+
const filterContent = (( isfilterContentVisisble || [WECHAT, MOBILE_PUSH, INAPP].includes(this.state.channel.toUpperCase())) && <div className="action-container">
|
|
2737
2814
|
{isfilterContentVisisble && <CapInput.Search
|
|
2738
2815
|
className="search-text"
|
|
2739
2816
|
style={{width: '210px'}}
|
|
@@ -3025,6 +3102,7 @@ Templates.propTypes = {
|
|
|
3025
3102
|
whatsappActions: PropTypes.object,
|
|
3026
3103
|
rcsActions: PropTypes.object,
|
|
3027
3104
|
zaloActions: PropTypes.object,
|
|
3105
|
+
inAppActions: PropTypes.object,
|
|
3028
3106
|
smsRegister: PropTypes.any,
|
|
3029
3107
|
isDltFromRcs: PropTypes.bool,
|
|
3030
3108
|
};
|
|
@@ -3041,6 +3119,7 @@ const mapStateToProps = createStructuredSelector({
|
|
|
3041
3119
|
Line: makeSelectLine(),
|
|
3042
3120
|
Viber: makeSelectViber(),
|
|
3043
3121
|
Zalo: makeSelectZalo(),
|
|
3122
|
+
InApp: makeSelectInApp(),
|
|
3044
3123
|
});
|
|
3045
3124
|
|
|
3046
3125
|
function mapDispatchToProps(dispatch) {
|
|
@@ -3048,6 +3127,7 @@ function mapDispatchToProps(dispatch) {
|
|
|
3048
3127
|
actions: bindActionCreators(actions, dispatch),
|
|
3049
3128
|
smsActions: bindActionCreators(smsActions, dispatch),
|
|
3050
3129
|
mobilepushActions: bindActionCreators(mobilepushActions, dispatch),
|
|
3130
|
+
inAppActions: bindActionCreators(inAppActions, dispatch),
|
|
3051
3131
|
smsEditActions: bindActionCreators(smsEditActions, dispatch),
|
|
3052
3132
|
ebillActions: bindActionCreators(ebillActions, dispatch),
|
|
3053
3133
|
emailActions: bindActionCreators(emailActions, dispatch),
|
|
@@ -126,6 +126,10 @@ export default defineMessages({
|
|
|
126
126
|
id: `${scope}.noAccountsPresent`,
|
|
127
127
|
defaultMessage: "Push notifications are not setup for your brand",
|
|
128
128
|
},
|
|
129
|
+
"noAccountsPresentInApp": {
|
|
130
|
+
id: `${scope}.noAccountsPresentInApp`,
|
|
131
|
+
defaultMessage: "In app message are not setup for your brand",
|
|
132
|
+
},
|
|
129
133
|
"noAccountsPresentWeChat": {
|
|
130
134
|
id: `${scope}.noAccountsPresentWeChat`,
|
|
131
135
|
defaultMessage: "Wechat accounts are not setup for your brand",
|
|
@@ -326,6 +330,10 @@ export default defineMessages({
|
|
|
326
330
|
id: `${scope}.newWhatsappTemplate`,
|
|
327
331
|
defaultMessage: 'Add new Whatsapp {template}',
|
|
328
332
|
},
|
|
333
|
+
"newInAppMessageTemplate": {
|
|
334
|
+
id: `${scope}.newInAppMessageTemplate`,
|
|
335
|
+
defaultMessage: 'Add new In app message {template}',
|
|
336
|
+
},
|
|
329
337
|
"newNotificationTemplate": {
|
|
330
338
|
id: `${scope}.newNotificationTemplate`,
|
|
331
339
|
defaultMessage: 'New notification {template}',
|
|
@@ -370,6 +378,14 @@ export default defineMessages({
|
|
|
370
378
|
id: `${scope}.noApprovedWhatsappTemplatesDesc`,
|
|
371
379
|
defaultMessage: 'Please try creating a new template, once it is approved by Whatsapp it will be available here',
|
|
372
380
|
},
|
|
381
|
+
"inAppTitleIllustration": {
|
|
382
|
+
id: `${scope}.inAppTitleIllustration`,
|
|
383
|
+
defaultMessage: 'There are no templates available',
|
|
384
|
+
},
|
|
385
|
+
"inAppDescIllustration": {
|
|
386
|
+
id: `${scope}.inAppDescIllustration`,
|
|
387
|
+
defaultMessage: 'You can create new templates on the In app message platform and once they’re created successfully, you can view them here',
|
|
388
|
+
},
|
|
373
389
|
"smsTitleIllustartion": {
|
|
374
390
|
id: `${scope}.smsTitleIllustartion`,
|
|
375
391
|
defaultMessage: 'Create an SMS {template}',
|
|
@@ -394,6 +410,10 @@ export default defineMessages({
|
|
|
394
410
|
id: `${scope}.mobilepushAccount`,
|
|
395
411
|
defaultMessage: 'Mobilepush account',
|
|
396
412
|
},
|
|
413
|
+
"inappAccount": {
|
|
414
|
+
id: `${scope}.inappAccount`,
|
|
415
|
+
defaultMessage: 'In app message account',
|
|
416
|
+
},
|
|
397
417
|
"lineAccount": {
|
|
398
418
|
id: `${scope}.lineAccount`,
|
|
399
419
|
defaultMessage: 'Line account',
|
|
@@ -29,7 +29,7 @@ import FTP from '../FTP';
|
|
|
29
29
|
import Gallery from '../Assets/Gallery';
|
|
30
30
|
import withStyles from '../../hoc/withStyles';
|
|
31
31
|
import styles, { CapTabStyle } from './TemplatesV2.style';
|
|
32
|
-
import { CREATIVES_UI_VIEW, LOYALTY, WHATSAPP, RCS, LINE, EMAIL, ASSETS, JP_LOCALE_HIDE_FEATURE, ZALO } from '../App/constants';
|
|
32
|
+
import { CREATIVES_UI_VIEW, LOYALTY, WHATSAPP, RCS, LINE, EMAIL, ASSETS, JP_LOCALE_HIDE_FEATURE, ZALO, INAPP } from '../App/constants';
|
|
33
33
|
import AccessForbidden from '../../v2Components/AccessForbidden';
|
|
34
34
|
import { getObjFromQueryParams } from '../../utils/v2common';
|
|
35
35
|
import { selectCurrentOrgDetails } from "../../v2Containers/Cap/selectors";
|
|
@@ -63,6 +63,7 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
|
|
|
63
63
|
weChat: {content: <></>, tab: intl.formatMessage(messages.wechat), key: 'wechat'},
|
|
64
64
|
//'wechat': {content: this.getTemplatesComponent('wechat'), tab: 'Wechat', key: 'wechat'},
|
|
65
65
|
mPush: {content: <></>, tab: intl.formatMessage(messages.pushNotification), key: 'mobilepush'},
|
|
66
|
+
inApp: { content: <div></div>, tab: intl.formatMessage(messages.inapp), key: INAPP },
|
|
66
67
|
line: {content: <></>, tab: intl.formatMessage(messages.line), key: 'line'},
|
|
67
68
|
viber: {content: <></>, tab: intl.formatMessage(messages.viber), key: 'viber'},
|
|
68
69
|
facebook: {content: <div></div>, tab: intl.formatMessage(messages.facebook), key: 'facebook'},
|
|
@@ -281,7 +282,12 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
|
|
|
281
282
|
argsPanes.map((pane) => {
|
|
282
283
|
let content = null;
|
|
283
284
|
if (pane.key === selectedChannel) {
|
|
284
|
-
|
|
285
|
+
let channel;
|
|
286
|
+
if ( selectedChannel === "mpush") {
|
|
287
|
+
channel = "mobilepush";
|
|
288
|
+
} else {
|
|
289
|
+
channel = selectedChannel;
|
|
290
|
+
}
|
|
285
291
|
content = this.getTemplatesComponent(channel);
|
|
286
292
|
}
|
|
287
293
|
return {
|