@capillarytech/creatives-library 7.6.6 → 7.6.7

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capillarytech/creatives-library",
3
3
  "author": "meharaj",
4
- "version": "7.6.6",
4
+ "version": "7.6.7",
5
5
  "description": "Capillary creatives ui",
6
6
  "main": "./index.js",
7
7
  "module": "./index.es.js",
@@ -212,6 +212,7 @@ export const CapFacebookPreview = (props) => {
212
212
  ...data.params.creative.object_story_spec,
213
213
  link_data: {
214
214
  description: linkDesc,
215
+ message: primaryText,
215
216
  link: webSiteLink,
216
217
  name: linkHeadLine,
217
218
  picture: imageData.imageSrc,
@@ -227,11 +227,59 @@ class Creatives extends React.Component {
227
227
  break;
228
228
  }
229
229
  case constants.FACEBOOK: {
230
- creativesTemplateData = {
231
- selectedMarketingObjective: templateData.selectedMarketingObjective,
232
- edit: true,
233
- type: channel,
234
- };
230
+ if (templateData.fbContentType === "CREATIVE") {
231
+ const { accountId, creativeType } = templateData || {};
232
+ const fBContent = templateData.facebookCreativeList;
233
+ const facebookCreativeList = [];
234
+ fBContent.forEach((obj) => {
235
+ const data = cloneDeep(obj);
236
+ const {subType, linkDescription, imageLink, websiteLink, videoId} = obj;
237
+ delete data.linkDescription;
238
+ delete data.websiteLink;
239
+ data.linkDesc = linkDescription;
240
+ data.webSiteLink = websiteLink;
241
+ data.type = creativeType;
242
+ switch (subType) {
243
+ case "IMAGE":
244
+ data.imgSrc = imageLink;
245
+ delete data.imageLink;
246
+ break;
247
+ case "VIDEO":
248
+ data.video = {
249
+ previewImageUrl: imageLink,
250
+ videoId,
251
+ videoSrc: "",
252
+ videoName: "",
253
+ };
254
+ delete data.imageLink;
255
+ break;
256
+ default:
257
+ break;
258
+ }
259
+ facebookCreativeList.push(data);
260
+ });
261
+ creativesTemplateData = {
262
+ versions: {
263
+ base: {
264
+ content: {
265
+ FacebookAd: {...facebookCreativeList},
266
+ pageOrgUnitId: this.props.orgUnitId,
267
+ },
268
+ },
269
+ },
270
+ type: "FACEBOOK",
271
+ edit: true,
272
+ selectedFacebookAccount: {
273
+ accountId,
274
+ },
275
+ };
276
+ }else {
277
+ creativesTemplateData = {
278
+ selectedMarketingObjective: templateData.selectedMarketingObjective,
279
+ edit: true,
280
+ type: channel,
281
+ };
282
+ }
235
283
  break;
236
284
  }
237
285
  case constants.LINE: {
@@ -387,12 +435,12 @@ class Creatives extends React.Component {
387
435
  if (template.value) {
388
436
  const FacebookAd = template.value.versions.base.content.FacebookAd;
389
437
  const type = FacebookAd[0].type;
390
- const {accountId, orgUnitFacebookPageSettingsMap = {}} = this.props.Templates.selectedFacebookAccount;
438
+ const {accountId} = this.props.Templates.selectedFacebookAccount || template.value || {};
391
439
  const facebookCreativeList = [];
392
440
  const fBContent = Object.values(FacebookAd);
393
441
  fBContent.forEach((obj) => {
394
442
  const data = cloneDeep(obj);
395
- const {subType, linkDesc, imgSrc, webSiteLink} = obj;
443
+ const {subType, linkDesc, imgSrc, webSiteLink, video} = obj;
396
444
  delete data.type;
397
445
  delete data.linkDesc;
398
446
  delete data.webSiteLink;
@@ -405,8 +453,9 @@ class Creatives extends React.Component {
405
453
  delete data.imgSrc;
406
454
  break;
407
455
  case "VIDEO":
408
- data.imageLink = "www.kuch_bhi_link.com";
409
- data.videoId = "123";
456
+ data.imageLink = video.previewImageUrl;
457
+ data.videoId = video.videoId;
458
+ delete data.video;
410
459
  break;
411
460
  case "CAROUSEL":
412
461
  break;
@@ -84,11 +84,12 @@ export const Advertisement = (props) => {
84
84
  actions,
85
85
  fbADData = {},
86
86
  onCreateComplete,
87
- templateData,
87
+ templateData = {},
88
88
  params,
89
89
  getFormSubscriptionData,
90
90
  facebookTemplateData,
91
91
  selectedMarketingObjective,
92
+ fbAdManger,
92
93
  } = props;
93
94
  const {
94
95
  formatMessage,
@@ -131,7 +132,7 @@ export const Advertisement = (props) => {
131
132
  orgUnitFacebookPageSettingsMap = {},
132
133
  employeeAccessToken: accessToken = "",
133
134
  accountId = "",
134
- } = selectedFacebookAccount;
135
+ } = selectedFacebookAccount || {};
135
136
  const { pageAccessToken, pageId: pId } = orgUnitFacebookPageSettingsMap[pageId] || {};
136
137
  videoData = {
137
138
  accessToken,
@@ -161,7 +162,7 @@ export const Advertisement = (props) => {
161
162
  }, [paramObj.id]);
162
163
 
163
164
  useEffect(() => {
164
- if ((params && params.id) || (templateData || {}).edit) {
165
+ if ((params && params.id) || templateData?.edit) {
165
166
  const { FacebookAd = [], pageOrgUnitId: editPageId} = get(templateData, `versions.base.content`) || get(fbADData, `templateDetails.versions.base.content`) || {};
166
167
  const editMessageTitle = (templateData || {}).name || get(fbADData, 'templateDetails.name');
167
168
  const editFBContent = Object.values(FacebookAd);
@@ -365,7 +366,7 @@ export const Advertisement = (props) => {
365
366
  name: messageTitle,
366
367
  };
367
368
  if (!isFullMode) {
368
- finalResponse = {...finalResponse, selectedMarketingObjective};
369
+ finalResponse = {...finalResponse, selectedMarketingObjective, accountId};
369
370
  }
370
371
  return finalResponse;
371
372
  }, [carouselData,
@@ -500,7 +501,7 @@ export const Advertisement = (props) => {
500
501
  ]
501
502
  );
502
503
 
503
- const isDisableContinue = () => messageTitle.trim() === "" || selectedAd === "";
504
+ const isDisableContinue = () => isFullMode ? (messageTitle.trim() === "" || selectedAd === "") : ( selectedAd === "");
504
505
 
505
506
  const onClickContinue = useCallback(() => { updateStep('createFacebookAd'); }, [step]);
506
507
 
@@ -809,7 +810,7 @@ export const Advertisement = (props) => {
809
810
  setPageId(value);
810
811
  }, [pageId]);
811
812
 
812
- const selectedFacebookAccount = get(facebookTemplateData, 'selectedFacebookAccount', {});
813
+ const selectedFacebookAccount = templateData?.edit ? templateData?.selectedFacebookAccount : facebookTemplateData?.selectedFacebookAccount;
813
814
  const {orgUnitFacebookPageSettingsMap = {}, employeeAccessToken: accessToken = "", accountId = "" } = selectedFacebookAccount;
814
815
 
815
816
  const getPageAccessOrgs = useCallback(() => {
@@ -836,7 +837,7 @@ export const Advertisement = (props) => {
836
837
  const options = getPageAccessOrgs() || [];
837
838
  const { data = {} } = fbADData.orgOuData || {};
838
839
  const selectedPageName = Object.keys(data).find((key) => data[key] === pageId);
839
- return ( (step === 'modeSelection' && isEmpty(templateData)) ?
840
+ return ( (step === 'modeSelection' && (isEmpty(templateData) || templateData?.mode === "create")) ?
840
841
  ( <CapSpin spinning={adSpinLoader} className="add-facebook-ad-section">
841
842
  <div style={{ position: 'fixed', top: '25px', zIndex: 1}}>
842
843
  <CapHeader
@@ -845,25 +846,27 @@ export const Advertisement = (props) => {
845
846
  className={"cap-header-facebook-ad"}
846
847
  />
847
848
  </div>
848
- <CapInput
849
- id={`fbAd_input`}
850
- onChange={onTextTitleChange}
851
- className="text-template-title"
852
- defaultValue={messageTitle || ''}
853
- value={messageTitle || ''}
854
- style={{marginBottom: 27, width: '762px'}}
855
- size="default"
856
- label={formatMessage(messages.creativeName)}
857
- />
858
- {isFullMode && <CapSelect
859
- label={formatMessage(messages.facebookPage)}
860
- key={"select-facebook-page"}
861
- onChange={onChangeFacebookPage}
862
- options={options}
863
- defaultValue={(options[0] || {} ).value}
864
- value={pageId || (options[0] || {} ).value}
865
- style={{marginBottom: 27, width: '372px'}}
866
- ></CapSelect>}
849
+ {isFullMode && <>
850
+ <CapInput
851
+ id={`fbAd_input`}
852
+ onChange={onTextTitleChange}
853
+ className="text-template-title"
854
+ defaultValue={messageTitle || ''}
855
+ value={messageTitle || ''}
856
+ style={{marginBottom: 27, width: '762px'}}
857
+ size="default"
858
+ label={formatMessage(messages.creativeName)}
859
+ />
860
+ <CapSelect
861
+ label={formatMessage(messages.facebookPage)}
862
+ key={"select-facebook-page"}
863
+ onChange={onChangeFacebookPage}
864
+ options={options}
865
+ defaultValue={(options[0] || {} ).value}
866
+ value={pageId || (options[0] || {} ).value}
867
+ style={{marginBottom: 27, width: '372px'}}
868
+ ></CapSelect>
869
+ </>}
867
870
  <CapHeading
868
871
  type="h4"
869
872
  style={{marginBottom: 11}}
@@ -887,8 +890,15 @@ export const Advertisement = (props) => {
887
890
  </FbAdFooter>
888
891
  </CapSpin> ) : (
889
892
  <CapSpin spinning={spinLoader}>
893
+ {!isFullMode && isEmpty(templateData) && <div style={{ position: 'fixed', top: '25px', zIndex: 1}}>
894
+ <CapHeader
895
+ inline
896
+ title={formatMessage(messages.newFacebookCreatives)}
897
+ className={"cap-header-facebook-ad"}
898
+ />
899
+ </div>}
890
900
  <CapRow className="add-facebook-ad-section" >
891
- <div className="cap-header-facebook-ad">
901
+ {isFullMode && <div className="cap-header-facebook-ad">
892
902
  <CapHeading
893
903
  type="h2"
894
904
  className="truncate-text"
@@ -906,7 +916,7 @@ export const Advertisement = (props) => {
906
916
  title={<FormattedMessage {...messages.creativesTemplatesEditName}/>}
907
917
  onClick={onClickEditName}
908
918
  />}
909
- </div>
919
+ </div>}
910
920
  <CapColumn span={12}>
911
921
  {isFullMode && <><CapHeading
912
922
  type="h4"
@@ -280,7 +280,7 @@ const Facebook = (props) => {
280
280
  fbAdManger={CREATIVE}
281
281
  />
282
282
  ) :
283
- (!isFullMode && messageStrategy !== "X_ENGAGE" && fbAdManger !== CREATIVE) ?
283
+ (!isFullMode && fbAdManger !== CREATIVE && messageStrategy === "DEFAULT" ) ?
284
284
  (<div className={className}>
285
285
 
286
286
  <div className="is-scrollable-section" >
@@ -418,6 +418,7 @@ const Facebook = (props) => {
418
418
  messageStrategy={messageStrategy}
419
419
  getFormSubscriptionData={getFormSubscriptionData}
420
420
  selectedMarketingObjective={selectedMarketingObjective}
421
+ fbAdManger={fbAdManger}
421
422
  />
422
423
  </div>
423
424
  );
@@ -1808,9 +1808,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1808
1808
  const isWechatChannel = channel === WECHAT;
1809
1809
  const isMobilePushChannel = channel === MOBILE_PUSH;
1810
1810
  const isLineChannel = channel === LINE;
1811
+ const isFacebookChannel = channel === FACEBOOK;
1811
1812
 
1812
1813
 
1813
- if ((isWechatChannel || isMobilePushChannel || isLineChannel) && !isEmpty(weCrmAccounts)) {
1814
+ if ((isWechatChannel || isMobilePushChannel || isLineChannel) && !isEmpty(weCrmAccounts) && !isFacebookChannel ) {
1814
1815
  forEach(weCrmAccounts, (account) => {
1815
1816
  if ((isWechatChannel && account.configs && account.configs.is_wecrm_enabled) || isMobilePushChannel || isLineChannel) {
1816
1817
  if (query.type === 'embedded' && (!query.module || (query.module && query.module !== 'library'))) {
@@ -1950,25 +1951,30 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1950
1951
  render() {
1951
1952
  const isFullMode = this.isFullMode();
1952
1953
  const { activeMode, channel, wechatFilter, lineFilter } = this.state;
1953
- let showForFacebook = true;
1954
+ let showForFacebook = false;
1954
1955
  if (channel.toLowerCase() === FACEBOOK_CHANNEL) {
1955
- if (isEmpty(this.props.Templates.campaignSettings)) {
1956
- showForFacebook = false;
1957
- }
1958
- const fbSetting = get(this.props.Templates, 'campaignSettings.accountSettings.socialAccountSettings.facebookAccountSettings', []);
1959
- const { orgUnitFacebookPageSettingsMap = {} } = fbSetting[0] || {};
1960
- let pageAccessToken = false;
1961
- if (!isEmpty(orgUnitFacebookPageSettingsMap)) {
1962
- Object.values(orgUnitFacebookPageSettingsMap).forEach((obj) => {
1963
- if (obj.pageAccessToken) {
1964
- pageAccessToken = true;
1956
+ const campaignSettings = this.props.Templates.campaignSettings
1957
+ if (campaignSettings && isEmpty(campaignSettings?.accountSettings)) {
1958
+ showForFacebook = true;
1959
+ } else if(!isEmpty(campaignSettings?.accountSettings)) {
1960
+ const fbSetting = get(this.props.Templates, 'campaignSettings.accountSettings.socialAccountSettings.facebookAccountSettings', []);
1961
+ const { orgUnitFacebookPageSettingsMap = {} } = fbSetting[0] || {};
1962
+ let pageAccessToken = false;
1963
+ if (!isEmpty(orgUnitFacebookPageSettingsMap)) {
1964
+ Object.values(orgUnitFacebookPageSettingsMap).forEach((obj) => {
1965
+ if (obj.pageAccessToken) {
1966
+ pageAccessToken = true;
1967
+ }
1968
+ });
1969
+ if (!pageAccessToken) {
1970
+ showForFacebook = true;
1965
1971
  }
1966
- });
1967
- if (!pageAccessToken) {
1968
- showForFacebook = false;
1972
+ } else {
1973
+ showForFacebook = true;
1969
1974
  }
1970
1975
  }
1971
1976
  }
1977
+
1972
1978
  const showForViber = (![VIBER_CHANNEL, FACEBOOK_CHANNEL].includes(channel.toLowerCase()) ||
1973
1979
  (channel.toLowerCase() === VIBER_CHANNEL && !this.props.isFullMode && isEmpty(get(this.props, 'Templates.selectedViberAccount', {}))) ||
1974
1980
  (channel.toLowerCase() === FACEBOOK_CHANNEL && showForFacebook)
@@ -9,7 +9,7 @@ import * as types from './constants';
9
9
 
10
10
  const initialState = fromJS({
11
11
  getAllTemplatesInProgress: false,
12
- fetchingOrgLevelCampaignSettings: true,
12
+ fetchingOrgLevelCampaignSettings: false,
13
13
  templates: [],
14
14
  deleteResponse: {},
15
15
  deleteTemplateInProgress: false,