@capillarytech/creatives-library 7.17.93 → 7.17.94
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/v2Components/CapDeviceContent/index.js +310 -0
- package/v2Components/CapDeviceContent/index.scss +115 -0
- package/v2Components/CapDeviceContent/messages.js +94 -0
- package/v2Components/CapDeviceContent/tests/index.test.js +75 -0
- package/v2Components/CapImageUpload/index.js +11 -4
- package/v2Components/CapImageUpload/messages.js +6 -2
- 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 +78 -23
- package/v2Components/TemplatePreview/_templatePreview.scss +449 -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 +79 -7
- package/v2Containers/CreativesContainer/messages.js +4 -0
- package/v2Containers/InApp/actions.js +64 -0
- package/v2Containers/InApp/constants.js +126 -0
- package/v2Containers/InApp/index.js +769 -0
- package/v2Containers/InApp/index.scss +48 -0
- package/v2Containers/InApp/messages.js +99 -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 +142 -0
- package/v2Containers/InApp/tests/mockData.js +898 -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 +14 -0
- package/v2Containers/Templates/index.js +86 -32
- package/v2Containers/Templates/messages.js +20 -0
- package/v2Containers/TemplatesV2/index.js +2 -1
- 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
|
|
|
@@ -364,9 +374,9 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
364
374
|
nextProps.actions.getWeCrmAccounts();
|
|
365
375
|
} else if (nextProps.route.name.toLowerCase() === 'email') {
|
|
366
376
|
channel = 'Email';
|
|
367
|
-
} else if (nextProps.route.name.toLowerCase() === "mobilepush") {
|
|
377
|
+
} else if (nextProps.route.name.toLowerCase() === "mobilepush" || nextProps.route.name === INAPP) {
|
|
368
378
|
this.setState({defaultAccount: true});
|
|
369
|
-
channel =
|
|
379
|
+
channel = nextProps.route.name.toLowerCase();
|
|
370
380
|
nextProps.actions.getWeCrmAccounts(channel);
|
|
371
381
|
} else if (nextProps.route.name.toLowerCase() === 'ebill') {
|
|
372
382
|
channel = 'Ebill';
|
|
@@ -393,7 +403,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
393
403
|
params.wecrmToken = (nextProps.Templates.selectedWeChatAccount.configs || {}).wecrm_token;
|
|
394
404
|
params.originalId = nextProps.Templates.selectedWeChatAccount.sourceAccountIdentifier;
|
|
395
405
|
}
|
|
396
|
-
if (this.state.channel.toLowerCase()
|
|
406
|
+
if (['mobilepush', INAPP_LOWERCASE].includes((this.state.channel).toLowerCase()) && !isEmpty(nextProps.Templates.selectedWeChatAccount)) {
|
|
397
407
|
params.accountId = nextProps.Templates.selectedWeChatAccount.id;
|
|
398
408
|
}
|
|
399
409
|
this.getAllTemplates({params}, true);
|
|
@@ -405,7 +415,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
405
415
|
params.wecrmToken = (nextProps.Templates.selectedWeChatAccount.configs || {}).wecrm_token;
|
|
406
416
|
params.originalId = nextProps.Templates.selectedWeChatAccount.sourceAccountIdentifier;
|
|
407
417
|
}
|
|
408
|
-
if ((this.state.channel || '').toLowerCase()
|
|
418
|
+
if ((['mobilepush', INAPP_LOWERCASE].includes((this.state.channel || '').toLowerCase())) && nextProps.Templates.selectedWeChatAccount) {
|
|
409
419
|
params.accountId = nextProps.Templates.selectedWeChatAccount.id;
|
|
410
420
|
}
|
|
411
421
|
const selectedChannel = this.state.channel.toLowerCase();
|
|
@@ -451,7 +461,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
451
461
|
}
|
|
452
462
|
}
|
|
453
463
|
|
|
454
|
-
if (
|
|
464
|
+
if (['wechat' , 'mobilepush', INAPP_LOWERCASE].includes(selectedChannel) && isEmpty(nextProps.Templates.selectedWeChatAccount) && (this.props.location.query.type === 'embedded') && !this.isEnabledInLibraryModule("showAccountSelection")) {
|
|
455
465
|
let selectedAccount = '';
|
|
456
466
|
if (isEmpty(nextProps.Templates.weCrmAccounts)) {
|
|
457
467
|
return;
|
|
@@ -471,20 +481,19 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
471
481
|
nextProps.actions.setWeChatAccount(selectedAccount);
|
|
472
482
|
this.getAllTemplates({params});
|
|
473
483
|
});
|
|
474
|
-
} else if (
|
|
484
|
+
} else if ([INAPP_LOWERCASE, 'mobilepush'].includes(selectedChannel) && (nextProps.location.query.account_id || nextProps.location.query.source_account_id)) {
|
|
485
|
+
const { location: { query } } = nextProps || {};
|
|
475
486
|
forEach(nextProps.Templates.weCrmAccounts, (account) => {
|
|
476
|
-
if ((
|
|
487
|
+
if ((query.account_id && account.id === Number(query.account_id)) || (query.source_account_id && account.sourceAccountIdentifier && account.sourceAccountIdentifier === query.source_account_id)) {
|
|
477
488
|
selectedAccount = account;
|
|
478
489
|
}
|
|
479
490
|
});
|
|
480
491
|
this.props.actions.setWeChatAccount(selectedAccount);
|
|
481
|
-
params.accountId = Number(
|
|
492
|
+
params.accountId = Number(query.account_id);
|
|
482
493
|
this.getAllTemplates({params});
|
|
483
494
|
}
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
}
|
|
495
|
+
}
|
|
496
|
+
|
|
488
497
|
|
|
489
498
|
if (selectedChannel === "ebill" && nextProps.CreateEbill && nextProps.CreateEbill.createResponse && nextProps.CreateEbill.createResponse.templateId && nextProps.CreateEbill.createResponse.templateId !== '') {
|
|
490
499
|
const message = `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`;
|
|
@@ -513,7 +522,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
513
522
|
if ((this.state.channel || '').toLowerCase() !== "sms") {
|
|
514
523
|
CapNotification.error({key: 'somethingWrong', message});
|
|
515
524
|
}
|
|
516
|
-
const { smsActions, mobilepushActions, ebillActions, lineActions, viberActions, facebookActions, whatsappActions, rcsActions } = this.props;
|
|
525
|
+
const { smsActions, mobilepushActions, ebillActions, lineActions, viberActions, facebookActions, whatsappActions, inAppActions, rcsActions } = this.props;
|
|
517
526
|
switch (selectedChannel) {
|
|
518
527
|
case SMS_LOWERCASE:
|
|
519
528
|
smsActions.clearCreateResponse();
|
|
@@ -539,6 +548,9 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
539
548
|
case RCS_LOWERCASE:
|
|
540
549
|
rcsActions.clearCreateResponse();
|
|
541
550
|
break;
|
|
551
|
+
case inAppActions:
|
|
552
|
+
inAppActions.clearCreateResponse();
|
|
553
|
+
break;
|
|
542
554
|
default:
|
|
543
555
|
break;
|
|
544
556
|
}
|
|
@@ -653,9 +665,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
653
665
|
params.wecrmToken = this.props.Templates.weCrmAccounts[findIndex(this.props.Templates.weCrmAccounts, { name: value})].configs.wecrm_token;
|
|
654
666
|
this.props.actions.setWeChatAccount(this.props.Templates.weCrmAccounts[findIndex(this.props.Templates.weCrmAccounts, { name: value})]);
|
|
655
667
|
params.originalId = this.props.Templates.weCrmAccounts[findIndex(this.props.Templates.weCrmAccounts, { name: value})].sourceAccountIdentifier;
|
|
656
|
-
} else if (
|
|
657
|
-
this.props.
|
|
658
|
-
|
|
668
|
+
} else if (['mobilepush', INAPP_LOWERCASE].includes(selectedChannel)) {
|
|
669
|
+
const selectedAccount = this.props.Templates.weCrmAccounts[findIndex(this.props.Templates.weCrmAccounts, { name: value})];
|
|
670
|
+
this.props.actions.setWeChatAccount(selectedAccount);
|
|
671
|
+
const account = selectedAccount;
|
|
659
672
|
params.accountId = account.id;
|
|
660
673
|
const isAndroidSupported = get(account, "configs.android") === '1';
|
|
661
674
|
const isIosSupported = get(account, "configs.ios") === '1';
|
|
@@ -810,7 +823,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
810
823
|
queryParams.wecrmToken = this.props.Templates.selectedWeChatAccount.configs.wecrm_token;
|
|
811
824
|
queryParams.originalId = this.props.Templates.selectedWeChatAccount.sourceAccountIdentifier;
|
|
812
825
|
}
|
|
813
|
-
if (this.state.channel.toLowerCase()
|
|
826
|
+
if (([MOBILE_PUSH_LOWERCASE, INAPP_LOWERCASE.includes](this.state.channel.toLowerCase())) && !isEmpty(this.props.Templates.selectedWeChatAccount)) {
|
|
814
827
|
queryParams.accountId = this.props.Templates.selectedWeChatAccount.id;
|
|
815
828
|
if (this.state.mode) {
|
|
816
829
|
queryParams.mode = this.state.mode.toLowerCase();
|
|
@@ -1064,6 +1077,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1064
1077
|
break;
|
|
1065
1078
|
}
|
|
1066
1079
|
case MOBILE_PUSH:
|
|
1080
|
+
case INAPP:
|
|
1067
1081
|
templateData.content = template;
|
|
1068
1082
|
break;
|
|
1069
1083
|
case WECHAT:
|
|
@@ -1271,9 +1285,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1271
1285
|
const showWhatsappIllustration = !isEmpty(this.props.Templates.selectedWhatsappAccount) && [WHATSAPP_LOWERCASE].includes(channelLowerCase);
|
|
1272
1286
|
const showZaloIllustration = !isEmpty(this.props.Templates.selectedZaloAccount) && [ZALO_LOWERCASE].includes(channelLowerCase);
|
|
1273
1287
|
const showRcsIllustration = channelLowerCase === RCS_LOWERCASE && isEmpty(templates);
|
|
1288
|
+
const showInAppIllustration = channelLowerCase === INAPP_LOWERCASE && isEmpty(templates);
|
|
1274
1289
|
const noLoaderAndSearchText = isEmpty(this.state.searchText) && !isLoading;
|
|
1275
1290
|
return (<div>
|
|
1276
|
-
{[WECHAT, MOBILE_PUSH].includes(currentChannel) && this.showAccountName()}
|
|
1291
|
+
{[WECHAT, MOBILE_PUSH, INAPP].includes(currentChannel) && this.showAccountName()}
|
|
1277
1292
|
{filterContent}
|
|
1278
1293
|
{[WHATSAPP, ZALO].includes(currentChannel) && this.selectedFilters()}
|
|
1279
1294
|
<CapSpin spinning={isLoading} tip={loadingTip} style={{width: '100%'}}>
|
|
@@ -1291,13 +1306,13 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1291
1306
|
: ['sms', "email"].includes(this.state.channel.toLowerCase()) && !isLoading && this.getSmsEmailIllustration()
|
|
1292
1307
|
}
|
|
1293
1308
|
|
|
1294
|
-
{(this.state.selectedAccount === '' && isEmpty(this.props.Templates.selectedWeChatAccount)) && (
|
|
1309
|
+
{(this.state.selectedAccount === '' && isEmpty(this.props.Templates.selectedWeChatAccount)) && (['wechat', 'mobilepush', INAPP_LOWERCASE].includes(this.state.channel.toLowerCase())) &&
|
|
1295
1310
|
<div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh' }}>
|
|
1296
1311
|
<CapHeading type="h6">{accounts ? this.props.intl.formatMessage(messages.noAccountMessage) : this.props.intl.formatMessage(messages.noAccountsPresent)}</CapHeading>
|
|
1297
1312
|
</div>
|
|
1298
1313
|
}
|
|
1299
1314
|
|
|
1300
|
-
{ !isEmpty(this.props.Templates.selectedWeChatAccount) && ["mobilepush"].includes(this.state.channel.toLowerCase()) && this.state.selectedAccountError ?
|
|
1315
|
+
{ !isEmpty(this.props.Templates.selectedWeChatAccount) && ["mobilepush", INAPP_LOWERCASE].includes(this.state.channel.toLowerCase()) && this.state.selectedAccountError ?
|
|
1301
1316
|
<div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh'}}>
|
|
1302
1317
|
<CapHeading type="h6" >
|
|
1303
1318
|
{this.props.intl.formatMessage(messages.accountConfigError)}
|
|
@@ -1331,6 +1346,14 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1331
1346
|
</div>
|
|
1332
1347
|
)
|
|
1333
1348
|
}
|
|
1349
|
+
{showInAppIllustration &&
|
|
1350
|
+
(
|
|
1351
|
+
noLoaderAndSearchText &&
|
|
1352
|
+
<div className={`${this.isFullMode() ? 'inapp-illustration-parent' : ''}`}>
|
|
1353
|
+
<CapIllustration buttonClassName={`create-new-${channelLowerCase}`} {...this.getChannelTypeIllustrationInfo(currentChannel)} />
|
|
1354
|
+
</div>
|
|
1355
|
+
)
|
|
1356
|
+
}
|
|
1334
1357
|
</div>
|
|
1335
1358
|
}
|
|
1336
1359
|
</CapSpin>
|
|
@@ -1358,9 +1381,9 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1358
1381
|
pathname: `/sms/view`,
|
|
1359
1382
|
query: type === 'embedded' ? {type: 'embedded', module} : {},
|
|
1360
1383
|
};
|
|
1361
|
-
} else if (this.state.channel.toLowerCase()
|
|
1384
|
+
} else if (['mobilepush', INAPP_LOWERCASE].includes(this.state.channel.toLowerCase())) {
|
|
1362
1385
|
routeParams = {
|
|
1363
|
-
pathname:
|
|
1386
|
+
pathname: `/${this.state.channel.toLowerCase()}/edit/${e.template_id}`,
|
|
1364
1387
|
query: type === 'embedded' ? {type: 'embedded', module, account_id: e.account_id } : {},
|
|
1365
1388
|
};
|
|
1366
1389
|
} else if (this.state.channel.toLowerCase() === 'wechat') {
|
|
@@ -1796,6 +1819,14 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1796
1819
|
this.getAllTemplates({params: {}}, true);
|
|
1797
1820
|
this.props.mobilepushActions.clearCreateResponse();
|
|
1798
1821
|
});
|
|
1822
|
+
} else if (this.state.channel.toLowerCase() === "inapp") {
|
|
1823
|
+
duplicateObj.definition.accountId = this.props.Templates.selectedWeChatAccount.id;
|
|
1824
|
+
this.props.inAppActions.createInAppTemplate(duplicateObj, () => {
|
|
1825
|
+
const message = `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`;
|
|
1826
|
+
CapNotification.success({key: 'duplicateSuccess', message});
|
|
1827
|
+
this.getAllTemplates({params: {}}, true);
|
|
1828
|
+
this.props.inAppActions.clearCreateResponse();
|
|
1829
|
+
});
|
|
1799
1830
|
} else if (this.state.channel.toLowerCase() === "ebill") {
|
|
1800
1831
|
this.props.ebillActions.createTemplate(duplicateObj);
|
|
1801
1832
|
} else if (this.state.channel.toLowerCase() === "email") {
|
|
@@ -1918,6 +1949,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1918
1949
|
pathName = `/zalo/edit/${id}/`;
|
|
1919
1950
|
break;
|
|
1920
1951
|
}
|
|
1952
|
+
case INAPP: {
|
|
1953
|
+
pathName = `/inapp/edit/${id}/`;
|
|
1954
|
+
break;
|
|
1955
|
+
}
|
|
1921
1956
|
default:
|
|
1922
1957
|
break;
|
|
1923
1958
|
}
|
|
@@ -2206,7 +2241,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
2206
2241
|
if (this.props.location.query.type === "embedded" && this.props.location.query.module === "library") {
|
|
2207
2242
|
switch (property) {
|
|
2208
2243
|
case "showAccountSelection":
|
|
2209
|
-
return (this.props.route && (['wechat', 'mobilepush', WHATSAPP_LOWERCASE].includes(this.props.route.name.toLowerCase())));
|
|
2244
|
+
return (this.props.route && (['wechat', 'mobilepush', WHATSAPP_LOWERCASE, INAPP_LOWERCASE].includes(this.props.route.name.toLowerCase())));
|
|
2210
2245
|
case "setLocale":
|
|
2211
2246
|
return true;
|
|
2212
2247
|
case "callCreateFromProps":
|
|
@@ -2346,6 +2381,15 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
2346
2381
|
descriptionClassName: 'illustration-desc zalo-illustration',
|
|
2347
2382
|
buttonClassName: "zalo-illustration-button",
|
|
2348
2383
|
};
|
|
2384
|
+
case INAPP:
|
|
2385
|
+
return {
|
|
2386
|
+
illustrationImage: inAppIllustration,
|
|
2387
|
+
title: <FormattedMessage {...messages.inAppTitleIllustration} />,
|
|
2388
|
+
description: <FormattedMessage {...messages.inAppDescIllustration} />,
|
|
2389
|
+
descriptionPosition: 'bottom',
|
|
2390
|
+
descriptionClassName: 'illustration-desc inapp-illustration',
|
|
2391
|
+
buttonClassName: "inapp-illustration-button",
|
|
2392
|
+
}
|
|
2349
2393
|
default:
|
|
2350
2394
|
return {};
|
|
2351
2395
|
}
|
|
@@ -2401,24 +2445,25 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
2401
2445
|
const { weCrmAccounts = [], fetchingWeCrmAccounts = false, campaignSettings = {} } = templates;
|
|
2402
2446
|
const isWechatChannel = channel === WECHAT;
|
|
2403
2447
|
const isMobilePushChannel = channel === MOBILE_PUSH;
|
|
2448
|
+
const isInAppChannel = channel === INAPP;
|
|
2404
2449
|
const isFacebookChannel = channel === FACEBOOK;
|
|
2405
2450
|
|
|
2406
|
-
if ([WECHAT, MOBILE_PUSH, LINE, ZALO].includes(channel) && !isEmpty(weCrmAccounts) && !isFacebookChannel) {
|
|
2451
|
+
if ([WECHAT, MOBILE_PUSH, INAPP, LINE, ZALO].includes(channel) && !isEmpty(weCrmAccounts) && !isFacebookChannel) {
|
|
2407
2452
|
forEach(weCrmAccounts, (account) => {
|
|
2408
|
-
if ((isWechatChannel && account.configs && account.configs.is_wecrm_enabled) || [MOBILE_PUSH, LINE, ZALO].includes(channel)) {
|
|
2453
|
+
if ((isWechatChannel && account.configs && account.configs.is_wecrm_enabled) || [MOBILE_PUSH, INAPP, LINE, ZALO].includes(channel)) {
|
|
2409
2454
|
if (query.type === 'embedded' && (!query.module || (query.module && query.module !== 'library'))) {
|
|
2410
2455
|
if (query.source_account_id && account.sourceAccountIdentifier === query.source_account_id) {
|
|
2411
2456
|
accountOptions.push(
|
|
2412
|
-
{ key: isMobilePushChannel ? account.id : account.uuid,
|
|
2457
|
+
{ key: isMobilePushChannel || isInAppChannel ? account.id : account.uuid,
|
|
2413
2458
|
title: account.name,
|
|
2414
2459
|
value: account.name,
|
|
2415
2460
|
icon: <CapIcon.CapIconAvatar text={account.name[0]} width="auto" height="2rem"/>,
|
|
2416
2461
|
}
|
|
2417
2462
|
);
|
|
2418
|
-
} else if (query.module && (isWechatChannel || isMobilePushChannel)) {
|
|
2463
|
+
} else if (query.module && (isWechatChannel || isMobilePushChannel || isInAppChannel)) {
|
|
2419
2464
|
accountOptions.push(
|
|
2420
2465
|
{
|
|
2421
|
-
key: isMobilePushChannel ? account.id : account.uuid,
|
|
2466
|
+
key: isMobilePushChannel || isInAppChannel ? account.id : account.uuid,
|
|
2422
2467
|
value: account.name,
|
|
2423
2468
|
title: account.name,
|
|
2424
2469
|
icon: <CapIcon.CapIconAvatar text={account.name[0]} width="auto" height="2rem"/>,
|
|
@@ -2428,7 +2473,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
2428
2473
|
} else {
|
|
2429
2474
|
accountOptions.push(
|
|
2430
2475
|
{
|
|
2431
|
-
key: isMobilePushChannel ? account.id : account.uuid,
|
|
2476
|
+
key: isMobilePushChannel || isInAppChannel ? account.id : account.uuid,
|
|
2432
2477
|
value: account.name,
|
|
2433
2478
|
title: account.name,
|
|
2434
2479
|
icon: <CapIcon.CapIconAvatar text={account.name[0]} width="auto" height="2rem"/>,
|
|
@@ -2451,6 +2496,11 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
2451
2496
|
noAccountHeader = messages.noAccountsPresent;
|
|
2452
2497
|
break;
|
|
2453
2498
|
}
|
|
2499
|
+
case INAPP: {
|
|
2500
|
+
accountHeader = formatMessage(messages.inappAccount);
|
|
2501
|
+
noAccountHeader = messages.noAccountsPresentInApp;
|
|
2502
|
+
break;
|
|
2503
|
+
}
|
|
2454
2504
|
case WECHAT: {
|
|
2455
2505
|
accountHeader = formatMessage(messages.wechatAccount);
|
|
2456
2506
|
noAccountHeader = messages.noAccountsPresentWeChat;
|
|
@@ -2548,6 +2598,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
2548
2598
|
[MOBILE_PUSH]: 'mobilepushAccount',
|
|
2549
2599
|
[WECHAT]: 'wechatAccount',
|
|
2550
2600
|
[WHATSAPP]: 'whatsappAccount',
|
|
2601
|
+
[INAPP]: 'inappAccount',
|
|
2551
2602
|
[ZALO]: 'zaloAccount',
|
|
2552
2603
|
};
|
|
2553
2604
|
return formatMessage(messages[channelObj[channel?.toUpperCase()]]);
|
|
@@ -2733,7 +2784,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
2733
2784
|
const showWhatsappCountWarning = templatesCount >= WARNING_WHATSAPP_TEMPLATES;
|
|
2734
2785
|
const whatsappCountExceedText = <FormattedMessage {...messages.whatsappMaxTemplates} values={{ maxCount: MAX_WHATSAPP_TEMPLATES }}/>;
|
|
2735
2786
|
|
|
2736
|
-
const filterContent = (( isfilterContentVisisble || [WECHAT, MOBILE_PUSH].includes(this.state.channel.toUpperCase())) && <div className="action-container">
|
|
2787
|
+
const filterContent = (( isfilterContentVisisble || [WECHAT, MOBILE_PUSH, INAPP].includes(this.state.channel.toUpperCase())) && <div className="action-container">
|
|
2737
2788
|
{isfilterContentVisisble && <CapInput.Search
|
|
2738
2789
|
className="search-text"
|
|
2739
2790
|
style={{width: '210px'}}
|
|
@@ -3025,6 +3076,7 @@ Templates.propTypes = {
|
|
|
3025
3076
|
whatsappActions: PropTypes.object,
|
|
3026
3077
|
rcsActions: PropTypes.object,
|
|
3027
3078
|
zaloActions: PropTypes.object,
|
|
3079
|
+
inAppActions: PropTypes.object,
|
|
3028
3080
|
smsRegister: PropTypes.any,
|
|
3029
3081
|
isDltFromRcs: PropTypes.bool,
|
|
3030
3082
|
};
|
|
@@ -3041,6 +3093,7 @@ const mapStateToProps = createStructuredSelector({
|
|
|
3041
3093
|
Line: makeSelectLine(),
|
|
3042
3094
|
Viber: makeSelectViber(),
|
|
3043
3095
|
Zalo: makeSelectZalo(),
|
|
3096
|
+
InApp: makeSelectInApp(),
|
|
3044
3097
|
});
|
|
3045
3098
|
|
|
3046
3099
|
function mapDispatchToProps(dispatch) {
|
|
@@ -3048,6 +3101,7 @@ function mapDispatchToProps(dispatch) {
|
|
|
3048
3101
|
actions: bindActionCreators(actions, dispatch),
|
|
3049
3102
|
smsActions: bindActionCreators(smsActions, dispatch),
|
|
3050
3103
|
mobilepushActions: bindActionCreators(mobilepushActions, dispatch),
|
|
3104
|
+
inAppActions: bindActionCreators(inAppActions, dispatch),
|
|
3051
3105
|
smsEditActions: bindActionCreators(smsEditActions, dispatch),
|
|
3052
3106
|
ebillActions: bindActionCreators(ebillActions, dispatch),
|
|
3053
3107
|
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'},
|