@capillarytech/creatives-library 7.5.4 → 7.5.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.
Files changed (48) hide show
  1. package/assets/facebookEmptyPlaceholder.png +0 -0
  2. package/config/app.js +2 -0
  3. package/index.js +6 -0
  4. package/package.json +1 -1
  5. package/reducers.js +2 -1
  6. package/routes.js +5 -0
  7. package/services/api.js +34 -1
  8. package/utils/common.js +13 -1
  9. package/v2Components/CapImageUpload/index.js +260 -0
  10. package/v2Components/CapImageUpload/index.scss +32 -0
  11. package/v2Components/CapImageUpload/messages.js +49 -0
  12. package/v2Components/CapRadioCardCustom/index.js +66 -0
  13. package/v2Components/CapVideoUpload/index.js +299 -0
  14. package/v2Components/CapVideoUpload/index.scss +29 -0
  15. package/v2Components/CapVideoUpload/messages.js +54 -0
  16. package/v2Components/TemplatePreview/index.js +19 -2
  17. package/v2Containers/App/constants.js +21 -0
  18. package/v2Containers/Cap/messages.js +30 -0
  19. package/v2Containers/CapFacebookPreview/actions.js +31 -0
  20. package/v2Containers/CapFacebookPreview/constants.js +21 -0
  21. package/v2Containers/CapFacebookPreview/index.js +396 -0
  22. package/v2Containers/CapFacebookPreview/messages.js +138 -0
  23. package/v2Containers/CapFacebookPreview/reducer.js +37 -0
  24. package/v2Containers/CapFacebookPreview/sagas.js +99 -0
  25. package/v2Containers/CapFacebookPreview/selectors.js +25 -0
  26. package/v2Containers/CreativesContainer/SlideBoxContent.js +55 -1
  27. package/v2Containers/CreativesContainer/index.js +19 -9
  28. package/v2Containers/Facebook/Advertisement/constant.js +12 -0
  29. package/v2Containers/Facebook/Advertisement/index.js +955 -0
  30. package/v2Containers/Facebook/Advertisement/index.scss +49 -0
  31. package/v2Containers/Facebook/Advertisement/messages.js +155 -0
  32. package/v2Containers/Facebook/Advertisement/video.js +0 -0
  33. package/v2Containers/Facebook/actions.js +62 -0
  34. package/v2Containers/Facebook/constants.js +25 -1
  35. package/v2Containers/Facebook/index.js +133 -107
  36. package/v2Containers/Facebook/reducer.js +95 -1
  37. package/v2Containers/Facebook/sagas.js +136 -0
  38. package/v2Containers/Facebook/selectors.js +10 -0
  39. package/v2Containers/Line/Container/Video/index.js +38 -41
  40. package/v2Containers/Templates/_templates.scss +26 -0
  41. package/v2Containers/Templates/actions.js +14 -1
  42. package/v2Containers/Templates/constants.js +8 -0
  43. package/v2Containers/Templates/index.js +117 -10
  44. package/v2Containers/Templates/messages.js +8 -4
  45. package/v2Containers/Templates/reducer.js +22 -0
  46. package/v2Containers/Templates/sagas.js +26 -1
  47. package/v2Containers/TemplatesV2/index.js +13 -13
  48. 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
- if (this.state.channel.toLowerCase() === VIBER_CHANNEL && isEmpty(nextProps.Templates.selectedViberAccount)) {
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 key={`${currentChannel}-card-list`} cardList={cardDataList} type={currentChannel} style={{marginLeft: '16px'}}/>
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
- {isEmpty(weCrmAccounts) && !fetchingWeCrmAccounts ? <FormattedMessage {...noAccountHeader} /> :
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() !== VIBER_CHANNEL ||
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
- if (channel === 'line') {
186
- return this.getLineComponent();
187
- }
188
- if (channel === 'ftp') {
189
- return this.getFTPComponent();
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
+ break;
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" onChange={onChangeButtonText}
514
+ type="input"
515
+ onChange={onChangeButtonText}
515
516
  label={formatMessage(messages.buttonText)}
516
517
  defaultValue={buttonText}
517
518
  value={buttonText}