@capillarytech/creatives-library 7.5.3 → 7.5.5
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/assets/facebookEmptyPlaceholder.png +0 -0
- package/config/app.js +2 -0
- package/index.js +6 -0
- package/package.json +1 -1
- package/reducers.js +2 -1
- package/routes.js +5 -0
- package/services/api.js +34 -1
- package/utils/common.js +13 -1
- package/v2Components/CapImageUpload/index.js +260 -0
- package/v2Components/CapImageUpload/index.scss +32 -0
- package/v2Components/CapImageUpload/messages.js +49 -0
- package/v2Components/CapRadioCardCustom/index.js +66 -0
- package/v2Components/CapVideoUpload/index.js +299 -0
- package/v2Components/CapVideoUpload/index.scss +29 -0
- package/v2Components/CapVideoUpload/messages.js +54 -0
- package/v2Components/TemplatePreview/index.js +19 -2
- package/v2Containers/App/constants.js +21 -0
- package/v2Containers/Cap/messages.js +30 -0
- package/v2Containers/CapFacebookPreview/actions.js +31 -0
- package/v2Containers/CapFacebookPreview/constants.js +21 -0
- package/v2Containers/CapFacebookPreview/index.js +396 -0
- package/v2Containers/CapFacebookPreview/messages.js +138 -0
- package/v2Containers/CapFacebookPreview/reducer.js +37 -0
- package/v2Containers/CapFacebookPreview/sagas.js +99 -0
- package/v2Containers/CapFacebookPreview/selectors.js +25 -0
- package/v2Containers/CreativesContainer/SlideBoxContent.js +55 -1
- package/v2Containers/CreativesContainer/index.js +19 -9
- package/v2Containers/Facebook/Advertisement/constant.js +12 -0
- package/v2Containers/Facebook/Advertisement/index.js +955 -0
- package/v2Containers/Facebook/Advertisement/index.scss +49 -0
- package/v2Containers/Facebook/Advertisement/messages.js +155 -0
- package/v2Containers/Facebook/Advertisement/video.js +0 -0
- package/v2Containers/Facebook/actions.js +62 -0
- package/v2Containers/Facebook/constants.js +25 -1
- package/v2Containers/Facebook/index.js +133 -107
- package/v2Containers/Facebook/reducer.js +95 -1
- package/v2Containers/Facebook/sagas.js +136 -0
- package/v2Containers/Facebook/selectors.js +10 -0
- package/v2Containers/Line/Container/Video/index.js +38 -41
- package/v2Containers/Templates/_templates.scss +26 -0
- package/v2Containers/Templates/actions.js +14 -1
- package/v2Containers/Templates/constants.js +8 -0
- package/v2Containers/Templates/index.js +117 -10
- package/v2Containers/Templates/messages.js +8 -4
- package/v2Containers/Templates/reducer.js +22 -0
- package/v2Containers/Templates/sagas.js +26 -1
- package/v2Containers/TemplatesV2/index.js +13 -13
- package/v2Containers/Viber/index.js +2 -1
|
@@ -42,6 +42,7 @@ import * as ebillActions from '../Ebill/actions';
|
|
|
42
42
|
import * as emailActions from '../Email/actions';
|
|
43
43
|
import * as lineActions from '../Line/Container/actions';
|
|
44
44
|
import * as viberActions from '../Viber/actions';
|
|
45
|
+
import * as facebookActions from '../Facebook/actions';
|
|
45
46
|
|
|
46
47
|
import CardGrid from '../../v2Components/CardGrid';
|
|
47
48
|
import config from '../../config/app';
|
|
@@ -57,8 +58,9 @@ import {
|
|
|
57
58
|
CHANNEL_CREATE_TRACK_MAPPING,
|
|
58
59
|
CHANNEL_EDIT_TRACK_MAPPING,
|
|
59
60
|
VIBER as VIBER_CHANNEL,
|
|
61
|
+
FACEBOOK as FACEBOOK_CHANNEL,
|
|
60
62
|
} from '../App/constants';
|
|
61
|
-
import { MOBILE_PUSH, WECHAT, SMS, EMAIL, EBILL, LINE, VIBER } from '../CreativesContainer/constants';
|
|
63
|
+
import { MOBILE_PUSH, WECHAT, SMS, EMAIL, EBILL, LINE, VIBER, FACEBOOK } from '../CreativesContainer/constants';
|
|
62
64
|
|
|
63
65
|
import emailIllustration from '../Assets/images/emailIllustration.svg';
|
|
64
66
|
import smsIllustration from '../Assets/images/smsIllustration.svg';
|
|
@@ -181,6 +183,11 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
181
183
|
this.props.actions.getWeCrmAccounts(channel);
|
|
182
184
|
}
|
|
183
185
|
break;
|
|
186
|
+
case FACEBOOK:
|
|
187
|
+
channel = 'Facebook';
|
|
188
|
+
activeMode = ACCOUNT_SELECTION_MODE;
|
|
189
|
+
this.props.actions.getAccountsSettings();
|
|
190
|
+
break;
|
|
184
191
|
default:
|
|
185
192
|
channel = '';
|
|
186
193
|
}
|
|
@@ -198,7 +205,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
198
205
|
if (this.props.location.query.type === 'embedded') {
|
|
199
206
|
this.props.actions.resetAccount();
|
|
200
207
|
}
|
|
201
|
-
if ((['line', VIBER_CHANNEL, 'sms', 'email', 'ebill'].includes((this.state.channel || '').toLowerCase())) || ((['wechat', 'mobilepush'].includes(this.state.channel.toLowerCase()) && !isEmpty(this.props.Templates.selectedWeChatAccount)))) {
|
|
208
|
+
if ((['line', VIBER_CHANNEL, FACEBOOK_CHANNEL, 'sms', 'email', 'ebill'].includes((this.state.channel || '').toLowerCase())) || ((['wechat', 'mobilepush'].includes(this.state.channel.toLowerCase()) && !isEmpty(this.props.Templates.selectedWeChatAccount)))) {
|
|
202
209
|
const queryParams = {
|
|
203
210
|
// name: this.state.searchText,
|
|
204
211
|
// sortBy: this.state.sortBy,
|
|
@@ -262,10 +269,14 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
262
269
|
channel = 'Viber';
|
|
263
270
|
this.setState({defaultAccount: true});
|
|
264
271
|
nextProps.actions.getWeCrmAccounts(channel);
|
|
272
|
+
} else if ( nextProps.route.name.toLowerCase() === FACEBOOK_CHANNEL) {
|
|
273
|
+
channel = 'Facebook';
|
|
274
|
+
this.setState({defaultAccount: true});
|
|
275
|
+
nextProps.actions.getAccountsSettings();
|
|
265
276
|
}
|
|
266
277
|
|
|
267
278
|
this.setState({ channel }, () => {
|
|
268
|
-
if (['line', VIBER_CHANNEL, 'sms', 'email', 'ebill'].includes(this.state.channel.toLowerCase()) || (this.state.channel.toLowerCase() === 'wechat' && !isEmpty(nextProps.Templates.selectedWeChatAccount))) {
|
|
279
|
+
if (['line', VIBER_CHANNEL, FACEBOOK_CHANNEL, 'sms', 'email', 'ebill'].includes(this.state.channel.toLowerCase()) || (this.state.channel.toLowerCase() === 'wechat' && !isEmpty(nextProps.Templates.selectedWeChatAccount))) {
|
|
269
280
|
if (this.state.channel.toLowerCase() === 'wechat' && !isEmpty(nextProps.Templates.selectedWeChatAccount)) {
|
|
270
281
|
params.wecrmId = (nextProps.Templates.selectedWeChatAccount.configs || {}).wecrm_app_id;
|
|
271
282
|
params.wecrmToken = (nextProps.Templates.selectedWeChatAccount.configs || {}).wecrm_token;
|
|
@@ -286,7 +297,8 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
286
297
|
if ((this.state.channel || '').toLowerCase() === "mobilepush" && nextProps.Templates.selectedWeChatAccount) {
|
|
287
298
|
params.accountId = nextProps.Templates.selectedWeChatAccount.id;
|
|
288
299
|
}
|
|
289
|
-
|
|
300
|
+
const selectedChannel = this.state.channel.toLowerCase();
|
|
301
|
+
if (selectedChannel === VIBER_CHANNEL && isEmpty(nextProps.Templates.selectedViberAccount)) {
|
|
290
302
|
let selectedAccount = '';
|
|
291
303
|
if (isEmpty(nextProps.Templates.weCrmAccounts)) {
|
|
292
304
|
return;
|
|
@@ -302,6 +314,31 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
302
314
|
this.getAllTemplates({params});
|
|
303
315
|
});
|
|
304
316
|
}
|
|
317
|
+
|
|
318
|
+
if (selectedChannel === FACEBOOK_CHANNEL && isEmpty(nextProps.Templates.selectedFacebookAccount)) {
|
|
319
|
+
if (isEmpty(nextProps.Templates.campaignSettings)) {
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
const fbSetting = get(nextProps.Templates, 'campaignSettings.accountSettings.socialAccountSettings.facebookAccountSettings', []);
|
|
323
|
+
const { accountName = "",
|
|
324
|
+
orgUnitFacebookPageSettingsMap = {},
|
|
325
|
+
} = fbSetting[0] || {};
|
|
326
|
+
let pageAccessToken = false;
|
|
327
|
+
if (!isEmpty(orgUnitFacebookPageSettingsMap)) {
|
|
328
|
+
Object.values(orgUnitFacebookPageSettingsMap).forEach((obj) => {
|
|
329
|
+
if (obj.pageAccessToken) {
|
|
330
|
+
pageAccessToken = true;
|
|
331
|
+
}
|
|
332
|
+
});
|
|
333
|
+
if (!pageAccessToken) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
this.setState({selectedAccount: accountName}, () => {
|
|
337
|
+
this.props.actions.setFacebookAccount(fbSetting[0]);
|
|
338
|
+
this.getAllTemplates({params});
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
}
|
|
305
342
|
if ((this.state.channel.toLowerCase() === 'wechat' || this.state.channel.toLowerCase() === 'mobilepush') && isEmpty(nextProps.Templates.selectedWeChatAccount) && (this.props.location.query.type === 'embedded') && !this.isEnabledInLibraryModule("showAccountSelection")) {
|
|
306
343
|
let selectedAccount = '';
|
|
307
344
|
if (isEmpty(nextProps.Templates.weCrmAccounts)) {
|
|
@@ -374,6 +411,8 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
374
411
|
this.props.lineActions.clearCreateResponse();
|
|
375
412
|
} else if (this.state.channel.toLowerCase() === VIBER_CHANNEL) {
|
|
376
413
|
this.props.viberActions.clearCreateResponse();
|
|
414
|
+
} else if (this.state.channel.toLowerCase() === FACEBOOK_CHANNEL) {
|
|
415
|
+
this.props.facebookActions.clearCreateResponse();
|
|
377
416
|
}
|
|
378
417
|
}
|
|
379
418
|
}
|
|
@@ -667,6 +706,27 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
667
706
|
case WECHAT:
|
|
668
707
|
templateData.content = this.prepareWeChatPreviewData(template);
|
|
669
708
|
break;
|
|
709
|
+
case FACEBOOK:
|
|
710
|
+
const { FacebookAd = {} } = get(template.versions.base, 'content', {});
|
|
711
|
+
const isCarousel = get(FacebookAd, '[0].type', '') === 'CAROUSEL';
|
|
712
|
+
const fbAdImages = Object.values(FacebookAd).map((obj) => {
|
|
713
|
+
if (obj.subType === "VIDEO") {
|
|
714
|
+
return {url: obj.video.previewImageUrl};
|
|
715
|
+
}
|
|
716
|
+
return {url: obj.imgSrc};
|
|
717
|
+
});
|
|
718
|
+
templateData.content = (<div style={{ display: 'flex'}}>{
|
|
719
|
+
(fbAdImages.map((img) => <img
|
|
720
|
+
width={208}
|
|
721
|
+
height={279}
|
|
722
|
+
src={img.url}
|
|
723
|
+
alt={"test"}
|
|
724
|
+
key={`${img.url}_`}
|
|
725
|
+
/> ))
|
|
726
|
+
}
|
|
727
|
+
</div>);
|
|
728
|
+
templateData.className = isCarousel ? 'carousel-img-section' : '';
|
|
729
|
+
break;
|
|
670
730
|
case LINE: {
|
|
671
731
|
const {
|
|
672
732
|
content: {
|
|
@@ -750,7 +810,13 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
750
810
|
{!isLoading && <div>
|
|
751
811
|
{!isEmpty(filteredTemplates) || !isEmpty(this.state.searchText) || !isEmpty(this.props.Templates.templateError) ? (
|
|
752
812
|
<div className={!isEmpty(this.state.searchText) && isEmpty(cardDataList) ? '' : "pagination-container"}>
|
|
753
|
-
<CapCustomCardList
|
|
813
|
+
<CapCustomCardList
|
|
814
|
+
key={`${currentChannel}-card-list`}
|
|
815
|
+
cardList={cardDataList}
|
|
816
|
+
type={currentChannel}
|
|
817
|
+
style={{marginLeft: '16px'}}
|
|
818
|
+
fbType={"list"}
|
|
819
|
+
/>
|
|
754
820
|
</div>)
|
|
755
821
|
: ['sms', "email"].includes(this.state.channel.toLowerCase()) && <CapIllustration buttonClassName={`create-new-${channelLowerCase}`} {...this.getChannelTypeIllustrationInfo(currentChannel)} />
|
|
756
822
|
}
|
|
@@ -1242,6 +1308,15 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1242
1308
|
this.props.viberActions.clearCreateResponse();
|
|
1243
1309
|
}
|
|
1244
1310
|
});
|
|
1311
|
+
} else if (this.state.channel.toLowerCase() === FACEBOOK_CHANNEL) {
|
|
1312
|
+
this.props.facebookActions.createTemplate(duplicateObj, (response) => {
|
|
1313
|
+
if (response && response.templateId) {
|
|
1314
|
+
const message = `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`;
|
|
1315
|
+
CapNotification.success({key: 'duplicateSucess', message});
|
|
1316
|
+
this.getAllTemplates({params, resetPage: true});
|
|
1317
|
+
this.props.facebookActions.clearCreateResponse();
|
|
1318
|
+
}
|
|
1319
|
+
});
|
|
1245
1320
|
}
|
|
1246
1321
|
}
|
|
1247
1322
|
|
|
@@ -1326,6 +1401,9 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1326
1401
|
if (this.state.channel.toLowerCase() === VIBER_CHANNEL) {
|
|
1327
1402
|
pathName = `/viber/edit/${id}/`;
|
|
1328
1403
|
}
|
|
1404
|
+
if (this.state.channel.toLowerCase() === FACEBOOK_CHANNEL) {
|
|
1405
|
+
pathName = `/facebook/edit/${id}/`;
|
|
1406
|
+
}
|
|
1329
1407
|
if (this.state.channel.toUpperCase() === WECHAT) {
|
|
1330
1408
|
if (get(template, 'definition.msgcontent', '') === "RICH_MEDIA_WECHAT") {
|
|
1331
1409
|
pathName = `/wechat/richmedia/edit/${id}`;
|
|
@@ -1625,6 +1703,8 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1625
1703
|
const lineLoader = (getAllTemplatesInProgress && this.state.channel.toLowerCase() === 'line');
|
|
1626
1704
|
const smsLoader = (getAllTemplatesInProgress && this.state.channel.toLowerCase() === 'sms');
|
|
1627
1705
|
const viberLoader = (getAllTemplatesInProgress && this.state.channel.toLowerCase() === VIBER_CHANNEL);
|
|
1706
|
+
const facebookLoader = (getAllTemplatesInProgress && this.state.channel.toLowerCase() === FACEBOOK_CHANNEL);
|
|
1707
|
+
|
|
1628
1708
|
const wechatLoader = (((this.state.selectedAccount !== '' && getAllTemplatesInProgress) || (fetchingWeCrmAccounts)) && this.state.channel.toLowerCase() === 'wechat');
|
|
1629
1709
|
const mobilePushLoader = (((getAllTemplatesInProgress) || (fetchingWeCrmAccounts)) && this.state.channel.toLowerCase() === 'mobilepush');
|
|
1630
1710
|
const emailLoader = (
|
|
@@ -1639,6 +1719,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1639
1719
|
(ebillLoader !== undefined ? ebillLoader : false) ||
|
|
1640
1720
|
(mobilePushLoader !== undefined ? mobilePushLoader : false) ||
|
|
1641
1721
|
(lineLoader !== undefined ? lineLoader : false) ||
|
|
1722
|
+
(facebookLoader !== undefined ? facebookLoader : false) ||
|
|
1642
1723
|
(viberLoader !== undefined ? viberLoader : false);
|
|
1643
1724
|
return isLoading;
|
|
1644
1725
|
}
|
|
@@ -1716,12 +1797,12 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1716
1797
|
channel = channel.toUpperCase();
|
|
1717
1798
|
const { Templates: templates = {}, location = {} } = this.props;
|
|
1718
1799
|
const { query = {} } = location;
|
|
1719
|
-
const { weCrmAccounts = [], fetchingWeCrmAccounts = false } = templates;
|
|
1800
|
+
const { weCrmAccounts = [], fetchingWeCrmAccounts = false, campaignSettings = {} } = templates;
|
|
1720
1801
|
const isWechatChannel = channel === WECHAT;
|
|
1721
1802
|
const isMobilePushChannel = channel === MOBILE_PUSH;
|
|
1722
1803
|
const isLineChannel = channel === LINE;
|
|
1723
1804
|
|
|
1724
|
-
|
|
1805
|
+
|
|
1725
1806
|
if ((isWechatChannel || isMobilePushChannel || isLineChannel) && !isEmpty(weCrmAccounts)) {
|
|
1726
1807
|
forEach(weCrmAccounts, (account) => {
|
|
1727
1808
|
if ((isWechatChannel && account.configs && account.configs.is_wecrm_enabled) || isMobilePushChannel || isLineChannel) {
|
|
@@ -1784,11 +1865,31 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1784
1865
|
noAccountHeader = messages.noAccountsPresentViber;
|
|
1785
1866
|
break;
|
|
1786
1867
|
}
|
|
1868
|
+
case FACEBOOK: {
|
|
1869
|
+
noAccountHeader = messages.noAccountsPresentFacebook;
|
|
1870
|
+
break;
|
|
1871
|
+
}
|
|
1787
1872
|
default:
|
|
1788
1873
|
break;
|
|
1789
1874
|
}
|
|
1875
|
+
let showNoAccountHeader = isEmpty(weCrmAccounts) && !fetchingWeCrmAccounts;
|
|
1876
|
+
if (channel === FACEBOOK && !isEmpty(campaignSettings) ) {
|
|
1877
|
+
const fbSetting = get(campaignSettings, 'accountSettings.socialAccountSettings.facebookAccountSettings', []);
|
|
1878
|
+
const { orgUnitFacebookPageSettingsMap } = fbSetting[0] || {};
|
|
1879
|
+
let pageAccessToken = false;
|
|
1880
|
+
if (!isEmpty(orgUnitFacebookPageSettingsMap)) {
|
|
1881
|
+
Object.values(orgUnitFacebookPageSettingsMap).forEach((obj) => {
|
|
1882
|
+
if (obj.pageAccessToken) {
|
|
1883
|
+
pageAccessToken = true;
|
|
1884
|
+
}
|
|
1885
|
+
});
|
|
1886
|
+
showNoAccountHeader = !pageAccessToken;
|
|
1887
|
+
} else {
|
|
1888
|
+
showNoAccountHeader = true;
|
|
1889
|
+
}
|
|
1890
|
+
}
|
|
1790
1891
|
return (<CapSpin spinning={fetchingWeCrmAccounts}>
|
|
1791
|
-
{
|
|
1892
|
+
{showNoAccountHeader ? <FormattedMessage {...noAccountHeader} /> :
|
|
1792
1893
|
<div style={{ overflowX: "auto", paddingBottom: CAP_SPACE_16 }}>
|
|
1793
1894
|
<CapHeader
|
|
1794
1895
|
title={accountHeader}
|
|
@@ -1842,11 +1943,15 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
|
|
|
1842
1943
|
render() {
|
|
1843
1944
|
const isFullMode = this.isFullMode();
|
|
1844
1945
|
const { activeMode, channel, wechatFilter, lineFilter } = this.state;
|
|
1845
|
-
const showForViber = (channel.toLowerCase()
|
|
1846
|
-
(channel.toLowerCase() === VIBER_CHANNEL && !this.props.isFullMode && isEmpty(get(this.props, 'Templates.selectedViberAccount', {})))
|
|
1946
|
+
const showForViber = (![VIBER_CHANNEL, FACEBOOK_CHANNEL].includes(channel.toLowerCase()) ||
|
|
1947
|
+
(channel.toLowerCase() === VIBER_CHANNEL && !this.props.isFullMode && isEmpty(get(this.props, 'Templates.selectedViberAccount', {}))) ||
|
|
1948
|
+
(channel.toLowerCase() === FACEBOOK_CHANNEL && isEmpty(get(this.props, 'Templates.selectedFacebookAccount', {})))
|
|
1949
|
+
);
|
|
1847
1950
|
if (activeMode === ACCOUNT_SELECTION_MODE && showForViber ) {
|
|
1848
1951
|
return this.renderAccountSelection();
|
|
1849
1952
|
}
|
|
1953
|
+
|
|
1954
|
+
|
|
1850
1955
|
const pageHeader = "";
|
|
1851
1956
|
const pageHeaderDvs = "";
|
|
1852
1957
|
const isLoading = this.isLoading();
|
|
@@ -2058,6 +2163,7 @@ Templates.propTypes = {
|
|
|
2058
2163
|
handlePeviewTemplate: PropTypes.func,
|
|
2059
2164
|
router: PropTypes.object,
|
|
2060
2165
|
viberActions: PropTypes.object,
|
|
2166
|
+
facebookActions: PropTypes.object,
|
|
2061
2167
|
};
|
|
2062
2168
|
|
|
2063
2169
|
const mapStateToProps = createStructuredSelector({
|
|
@@ -2084,6 +2190,7 @@ function mapDispatchToProps(dispatch) {
|
|
|
2084
2190
|
globalActions: bindActionCreators(globalActions, dispatch),
|
|
2085
2191
|
lineActions: bindActionCreators(lineActions, dispatch),
|
|
2086
2192
|
viberActions: bindActionCreators(viberActions, dispatch),
|
|
2193
|
+
facebookActions: bindActionCreators(facebookActions, dispatch),
|
|
2087
2194
|
};
|
|
2088
2195
|
}
|
|
2089
2196
|
|
|
@@ -358,16 +358,20 @@ export default defineMessages({
|
|
|
358
358
|
id: `${scope}.richMediaTemplates`,
|
|
359
359
|
defaultMessage: 'Rich media templates',
|
|
360
360
|
},
|
|
361
|
-
deletingTemplate: {
|
|
361
|
+
"deletingTemplate": {
|
|
362
362
|
id: `${scope}.deletingTemplate`,
|
|
363
363
|
defaultMessage: 'Deleting template...',
|
|
364
364
|
},
|
|
365
|
-
duplicatingTemplate: {
|
|
365
|
+
"duplicatingTemplate": {
|
|
366
366
|
id: `${scope}.duplicatingTemplate`,
|
|
367
|
-
defaultMessage: 'Duplicating template...'
|
|
367
|
+
defaultMessage: 'Duplicating template...',
|
|
368
368
|
},
|
|
369
|
-
noAccountsPresentViber: {
|
|
369
|
+
"noAccountsPresentViber": {
|
|
370
370
|
id: `${scope}.noAccountsPresentViber`,
|
|
371
371
|
defaultMessage: "Viber accounts are not setup for your brand",
|
|
372
372
|
},
|
|
373
|
+
"noAccountsPresentFacebook": {
|
|
374
|
+
id: `${scope}.noAccountsPresentFacebook`,
|
|
375
|
+
defaultMessage: "Facebook accounts or Facebook Page are not setup for your brand",
|
|
376
|
+
},
|
|
373
377
|
});
|
|
@@ -9,10 +9,18 @@ import * as types from './constants';
|
|
|
9
9
|
|
|
10
10
|
const initialState = fromJS({
|
|
11
11
|
getAllTemplatesInProgress: false,
|
|
12
|
+
fetchingOrgLevelCampaignSettings: true,
|
|
12
13
|
templates: [],
|
|
13
14
|
deleteResponse: {},
|
|
14
15
|
deleteTemplateInProgress: false,
|
|
15
16
|
templateError: {},
|
|
17
|
+
campaignSettings: {
|
|
18
|
+
messageSettings: {
|
|
19
|
+
enableLinkTracking: false,
|
|
20
|
+
},
|
|
21
|
+
alertsSettings: {},
|
|
22
|
+
reportsSettings: {},
|
|
23
|
+
},
|
|
16
24
|
});
|
|
17
25
|
|
|
18
26
|
function templatesReducer(state = initialState, action) {
|
|
@@ -75,6 +83,8 @@ function templatesReducer(state = initialState, action) {
|
|
|
75
83
|
return state.set('selectedLineAccount', fromJS(action.lineAccount));
|
|
76
84
|
case types.SET_VIBER_ACCOUNT:
|
|
77
85
|
return state.set('selectedViberAccount', fromJS(action.viberAccount));
|
|
86
|
+
case types.SET_FACEBOOK_ACCOUNT:
|
|
87
|
+
return state.set('selectedFacebookAccount', fromJS(action.faceBookAccount));
|
|
78
88
|
case types.RESET_ACCOUNT:
|
|
79
89
|
return state
|
|
80
90
|
.remove('selectedWeChatAccount')
|
|
@@ -147,6 +157,18 @@ function templatesReducer(state = initialState, action) {
|
|
|
147
157
|
return state
|
|
148
158
|
.set('templates', [])
|
|
149
159
|
.set('weCRMtemplates', fromJS({}));
|
|
160
|
+
case types.GET_ORG_LEVEL_CAMPAIGN_SETTINGS_REQUEST:
|
|
161
|
+
return state.set('fetchingOrgLevelCampaignSettings', true);
|
|
162
|
+
case types.GET_ORG_LEVEL_CAMPAIGN_SETTINGS_SUCCESS:
|
|
163
|
+
return state.set('fetchingOrgLevelCampaignSettings', false).set(
|
|
164
|
+
'campaignSettings',
|
|
165
|
+
fromJS({
|
|
166
|
+
...state.get('campaignSettings'),
|
|
167
|
+
...(action.result || {}).entity,
|
|
168
|
+
}),
|
|
169
|
+
);
|
|
170
|
+
case types.GET_ORG_LEVEL_CAMPAIGN_SETTINGS_FAILURE:
|
|
171
|
+
return state.set('fetchingOrgLevelCampaignSettings', false);
|
|
150
172
|
default:
|
|
151
173
|
return state;
|
|
152
174
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { call, put, takeLatest, take, cancel } from 'redux-saga/effects';
|
|
1
|
+
import { call, put, takeLatest, take, cancel, select } from 'redux-saga/effects';
|
|
2
2
|
import { LOCATION_CHANGE } from 'react-router-redux';
|
|
3
3
|
// import { schema, normalize } from 'normalizr';
|
|
4
4
|
import * as Api from '../../services/api';
|
|
@@ -73,6 +73,30 @@ export function* fetchWeCrmAccounts(action) {
|
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
+
export function* getOrgLevelCampaignSettings() {
|
|
77
|
+
try {
|
|
78
|
+
const result = yield call(Api.getOrgLevelCampaignSettings);
|
|
79
|
+
yield put({
|
|
80
|
+
type: types.GET_ORG_LEVEL_CAMPAIGN_SETTINGS_SUCCESS,
|
|
81
|
+
result,
|
|
82
|
+
});
|
|
83
|
+
} catch (error) {
|
|
84
|
+
yield put({ type: types.GET_ORG_LEVEL_CAMPAIGN_SETTINGS_FAILURE, error });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function* watchGetOrgLevelCampaignSettings() {
|
|
89
|
+
const watcher = yield takeLatest(
|
|
90
|
+
types.GET_ORG_LEVEL_CAMPAIGN_SETTINGS_REQUEST,
|
|
91
|
+
getOrgLevelCampaignSettings,
|
|
92
|
+
);
|
|
93
|
+
yield take(LOCATION_CHANGE);
|
|
94
|
+
const store = yield select();
|
|
95
|
+
if (!store.getIn(['router', 'location', 'pathname']).includes('/settings/')) {
|
|
96
|
+
yield cancel(watcher);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
76
100
|
export function* sendZippedFile({selectedFile, errorHandler, successHandler}) {
|
|
77
101
|
let errorMessage = "";
|
|
78
102
|
try {
|
|
@@ -176,4 +200,5 @@ export default [
|
|
|
176
200
|
watchSendingFile,
|
|
177
201
|
watchGetDefaultBeeTemplates,
|
|
178
202
|
watchGetTemplateDetails,
|
|
203
|
+
watchGetOrgLevelCampaignSettings,
|
|
179
204
|
];
|
|
@@ -55,8 +55,7 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
|
|
|
55
55
|
mPush: {content: <></>, tab: intl.formatMessage(messages.pushNotification), key: 'mobilepush'},
|
|
56
56
|
line: {content: <></>, tab: intl.formatMessage(messages.line), key: 'line'},
|
|
57
57
|
viber: {content: <></>, tab: intl.formatMessage(messages.viber), key: 'viber'},
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
facebook: {content: <div></div>, tab: intl.formatMessage(messages.facebook), key: 'facebook'},
|
|
60
59
|
};
|
|
61
60
|
let filteredPanes = Object.keys(defaultPanes)
|
|
62
61
|
.filter((key) => !channelsToHide.includes(key)).reduce((obj = [], key) => {
|
|
@@ -70,15 +69,13 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
|
|
|
70
69
|
if (!channelsToHide.includes('callTask')) {
|
|
71
70
|
filteredPanes.push({content: <div></div>, tab: intl.formatMessage(messages.callTask), key: 'call_task'});
|
|
72
71
|
}
|
|
73
|
-
if (!channelsToHide.includes('facebook')) {
|
|
74
|
-
filteredPanes.push({content: <div></div>, tab: intl.formatMessage(messages.facebook), key: 'facebook'});
|
|
75
|
-
}
|
|
76
72
|
if (!channelsToHide.includes('FTP')) {
|
|
77
73
|
filteredPanes.push({content: <></>, tab: intl.formatMessage(messages.FTP), key: 'ftp'});
|
|
78
74
|
defaultChannel = 'FTP';
|
|
79
75
|
}
|
|
80
76
|
}
|
|
81
77
|
|
|
78
|
+
|
|
82
79
|
filteredPanes = filteredPanes.map( (pane) => {
|
|
83
80
|
if (channelsToDisable.includes(pane.key)) {
|
|
84
81
|
// eslint-disable-next-line no-param-reassign
|
|
@@ -151,9 +148,10 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
|
|
|
151
148
|
);
|
|
152
149
|
|
|
153
150
|
getFacebookComponent = () => {
|
|
154
|
-
const { messageDetails, cap, onFacebookSubmit } = this.props;
|
|
151
|
+
const { messageDetails, cap, onFacebookSubmit, isFullMode } = this.props;
|
|
155
152
|
return (
|
|
156
153
|
<Facebook
|
|
154
|
+
{...this.props}
|
|
157
155
|
messageDetails={messageDetails}
|
|
158
156
|
cap={cap}
|
|
159
157
|
onFacebookSubmit={onFacebookSubmit}
|
|
@@ -182,11 +180,15 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
|
|
|
182
180
|
let query = {};
|
|
183
181
|
if (!this.props.isFullMode) {
|
|
184
182
|
query = {type: 'embedded', module: 'library'};
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
183
|
+
switch (channel) {
|
|
184
|
+
case 'line':
|
|
185
|
+
return this.getLineComponent();
|
|
186
|
+
case 'ftp':
|
|
187
|
+
return this.getFTPComponent();
|
|
188
|
+
case 'facebook':
|
|
189
|
+
return this.getFacebookComponent();
|
|
190
|
+
default:
|
|
191
|
+
return "";
|
|
190
192
|
}
|
|
191
193
|
}
|
|
192
194
|
const location = {pathname: `/${channel}`, search: '', query};
|
|
@@ -195,8 +197,6 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
|
|
|
195
197
|
return this.getCallTaskComponent();
|
|
196
198
|
case 'assets':
|
|
197
199
|
return this.getGalleryComponent(location);
|
|
198
|
-
case 'facebook':
|
|
199
|
-
return this.getFacebookComponent();
|
|
200
200
|
default:
|
|
201
201
|
return (<Templates
|
|
202
202
|
key={channel}
|
|
@@ -511,7 +511,8 @@ const Viber = (props) => {
|
|
|
511
511
|
const ButtonViber = (<>
|
|
512
512
|
<CapInput
|
|
513
513
|
id="viber-button-text"
|
|
514
|
-
type="input"
|
|
514
|
+
type="input"
|
|
515
|
+
onChange={onChangeButtonText}
|
|
515
516
|
label={formatMessage(messages.buttonText)}
|
|
516
517
|
defaultValue={buttonText}
|
|
517
518
|
value={buttonText}
|