@capillarytech/creatives-library 7.6.1 → 7.6.3
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/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 +30 -1
- package/utils/common.js +13 -1
- package/v2Components/CapVideoUpload/index.js +14 -6
- package/v2Components/TemplatePreview/index.js +23 -2
- package/v2Containers/App/constants.js +21 -0
- package/v2Containers/Cap/messages.js +30 -0
- package/v2Containers/CapFacebookPreview/actions.js +3 -15
- package/v2Containers/CapFacebookPreview/constants.js +3 -11
- package/v2Containers/CapFacebookPreview/index.js +6 -6
- package/v2Containers/CapFacebookPreview/reducer.js +3 -9
- package/v2Containers/CapFacebookPreview/sagas.js +6 -65
- package/v2Containers/CreativesContainer/SlideBoxContent.js +64 -1
- package/v2Containers/CreativesContainer/index.js +19 -8
- package/v2Containers/Facebook/Advertisement/index.js +38 -15
- package/v2Containers/Facebook/Advertisement/index.scss +9 -0
- package/v2Containers/Facebook/Advertisement/messages.js +2 -2
- package/v2Containers/Facebook/actions.js +63 -0
- package/v2Containers/Facebook/constants.js +25 -1
- package/v2Containers/Facebook/index.js +135 -107
- package/v2Containers/Facebook/reducer.js +98 -1
- package/v2Containers/Facebook/sagas.js +147 -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 +138 -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
|
@@ -136,6 +136,7 @@ function SlideBoxContent(props) {
|
|
|
136
136
|
onShowTemplates,
|
|
137
137
|
handleClose,
|
|
138
138
|
onFTPSubmit,
|
|
139
|
+
campaignSettings,
|
|
139
140
|
} = props;
|
|
140
141
|
const type = (messageDetails.type || '').toLowerCase(); // type is context in get tags values : outbound | dvs | referral | loyalty | coupons
|
|
141
142
|
const query = { type: !isFullMode && 'embedded', module: isFullMode ? 'default' : 'library', isEditFromCampaigns: (templateData || {}).isEditFromCampaigns};
|
|
@@ -164,6 +165,8 @@ function SlideBoxContent(props) {
|
|
|
164
165
|
|
|
165
166
|
|
|
166
167
|
const isCreateSms = slidBoxContent === 'createTemplate' && channel === constants.SMS;
|
|
168
|
+
const isCreateFacebook = slidBoxContent === 'createTemplate' && channel === constants.FACEBOOK;
|
|
169
|
+
|
|
167
170
|
const isCreateMPush = slidBoxContent === 'createTemplate' && channel === constants.MOBILE_PUSH;
|
|
168
171
|
const isCreateCallTask = slidBoxContent === 'createTemplate' && channel === constants.CALL_TASK;
|
|
169
172
|
let isEditSms = false;
|
|
@@ -185,7 +188,7 @@ function SlideBoxContent(props) {
|
|
|
185
188
|
isEditEmailWithId = slidBoxContent === 'editTemplate' && channel === constants.EMAIL && templateData._id;
|
|
186
189
|
isEmailEditWithContent = slidBoxContent === 'editTemplate' && channel === constants.EMAIL && !templateData._id;
|
|
187
190
|
isEditFacebook = slidBoxContent === 'editTemplate' && channel === constants.FACEBOOK;
|
|
188
|
-
isPreview = slidBoxContent === 'preview' && (channel === constants.SMS || channel === constants.LINE || channel === constants.VIBER);
|
|
191
|
+
isPreview = slidBoxContent === 'preview' && (channel === constants.SMS || channel === constants.LINE || channel === constants.VIBER || channel === constants.FACEBOOK);
|
|
189
192
|
isEmailPreview = slidBoxContent === 'preview' && channel === constants.EMAIL;
|
|
190
193
|
isMpushPreview = slidBoxContent === 'preview' && channel === constants.MOBILE_PUSH;
|
|
191
194
|
isEditFTP = slidBoxContent === 'editTemplate' && [constants.NO_COMMUNICATION, constants.FTP].includes(channel);
|
|
@@ -263,6 +266,44 @@ function SlideBoxContent(props) {
|
|
|
263
266
|
};
|
|
264
267
|
return template.content;
|
|
265
268
|
}
|
|
269
|
+
case constants.FACEBOOK: {
|
|
270
|
+
const template = cloneDeep(templateDataObject.versions.base) || {};
|
|
271
|
+
const {FacebookAd = [], pageOrgUnitId} = template.content || {};
|
|
272
|
+
const {
|
|
273
|
+
type: fbType = "",
|
|
274
|
+
primaryText = "",
|
|
275
|
+
callToAction = "",
|
|
276
|
+
displayLink = "",
|
|
277
|
+
} = FacebookAd[0] || {};
|
|
278
|
+
const previewData = Object.values(template.content.FacebookAd).map((obj) => ({
|
|
279
|
+
imageData: obj.imgSrc ? {imageSrc: obj.imgSrc} : {},
|
|
280
|
+
linkDesc: obj.linkDesc,
|
|
281
|
+
linkHeadLine: obj.linkHeadLine,
|
|
282
|
+
subType: obj.subType,
|
|
283
|
+
videoData: obj.video ? { videoSrc: obj.video.originalContentUrl,
|
|
284
|
+
videoName: obj.video.videoName,
|
|
285
|
+
previewUrl: obj.video.previewImageUrl,
|
|
286
|
+
videoId: obj.video.videoId,
|
|
287
|
+
|
|
288
|
+
} : {},
|
|
289
|
+
webSiteLink: obj.webSiteLink,
|
|
290
|
+
}));
|
|
291
|
+
const facebookAccountSettings = get(campaignSettings, 'accountSettings.socialAccountSettings.facebookAccountSettings', []);
|
|
292
|
+
const {accountId, employeeAccessToken: accessToken, orgUnitFacebookPageSettingsMap = {}} = facebookAccountSettings[0] || {};
|
|
293
|
+
const {pageAccessToken, pageId} = orgUnitFacebookPageSettingsMap[pageOrgUnitId];
|
|
294
|
+
const fbContent = {
|
|
295
|
+
selectedAd: fbType,
|
|
296
|
+
previewData,
|
|
297
|
+
primaryText,
|
|
298
|
+
callToAction,
|
|
299
|
+
displayLink,
|
|
300
|
+
pageAccessToken,
|
|
301
|
+
pageId,
|
|
302
|
+
accountId,
|
|
303
|
+
accessToken,
|
|
304
|
+
};
|
|
305
|
+
return fbContent;
|
|
306
|
+
}
|
|
266
307
|
default:
|
|
267
308
|
return get(templateDataObject, `versions.base.content`);
|
|
268
309
|
}
|
|
@@ -505,6 +546,22 @@ function SlideBoxContent(props) {
|
|
|
505
546
|
onPreviewContentClicked={onPreviewContentClicked}
|
|
506
547
|
onTestContentClicked={onTestContentClicked}/>
|
|
507
548
|
}
|
|
549
|
+
{
|
|
550
|
+
isCreateFacebook && (
|
|
551
|
+
<Facebook
|
|
552
|
+
templateData={templateData}
|
|
553
|
+
messageDetails={messageDetails}
|
|
554
|
+
cap={cap}
|
|
555
|
+
onFacebookSubmit={onFacebookSubmit}
|
|
556
|
+
onCreateComplete={onCreateComplete}
|
|
557
|
+
setIsLoadingContent={setIsLoadingContent}
|
|
558
|
+
isFullMode={isFullMode}
|
|
559
|
+
createNew
|
|
560
|
+
getFormSubscriptionData={getFormData}
|
|
561
|
+
|
|
562
|
+
/>
|
|
563
|
+
)
|
|
564
|
+
}
|
|
508
565
|
{
|
|
509
566
|
isEditFacebook && (
|
|
510
567
|
<Facebook
|
|
@@ -512,7 +569,12 @@ function SlideBoxContent(props) {
|
|
|
512
569
|
messageDetails={messageDetails}
|
|
513
570
|
cap={cap}
|
|
514
571
|
onFacebookSubmit={onFacebookSubmit}
|
|
572
|
+
onCreateComplete={onCreateComplete}
|
|
515
573
|
isFullMode={isFullMode}
|
|
574
|
+
params={{
|
|
575
|
+
id: templateData._id,
|
|
576
|
+
}}
|
|
577
|
+
getFormSubscriptionData={getFormData}
|
|
516
578
|
/>
|
|
517
579
|
)
|
|
518
580
|
}
|
|
@@ -596,6 +658,7 @@ SlideBoxContent.propTypes = {
|
|
|
596
658
|
onChannelChange: PropTypes.func,
|
|
597
659
|
currentChannel: PropTypes.string,
|
|
598
660
|
onEmailModeChange: PropTypes.func,
|
|
661
|
+
onFacebookAdModeChange: PropTypes.func,
|
|
599
662
|
emailCreateMode: PropTypes.string,
|
|
600
663
|
templateStep: PropTypes.string,
|
|
601
664
|
onCreateNextStep: PropTypes.func,
|
|
@@ -51,6 +51,7 @@ class Creatives extends React.Component {
|
|
|
51
51
|
currentChannel: this.props.channel || 'sms',
|
|
52
52
|
weChatTemplateType: '',
|
|
53
53
|
weChatMaptemplateStep: 0,
|
|
54
|
+
|
|
54
55
|
};
|
|
55
56
|
this.creativesTemplateSteps = {
|
|
56
57
|
1: 'modeSelection',
|
|
@@ -104,7 +105,6 @@ class Creatives extends React.Component {
|
|
|
104
105
|
if ((currentChannel.toUpperCase() === constants.EMAIL && emailCreateMode === "upload") || currentChannel.toUpperCase() === constants.MOBILE_PUSH || currentChannel.toUpperCase() === constants.WECHAT) {
|
|
105
106
|
templateStep = prevState.templateStep + 2;
|
|
106
107
|
}
|
|
107
|
-
|
|
108
108
|
return {
|
|
109
109
|
templateStep,
|
|
110
110
|
};
|
|
@@ -114,6 +114,8 @@ class Creatives extends React.Component {
|
|
|
114
114
|
onEmailModeChange = (mode) => {
|
|
115
115
|
this.setState({ emailCreateMode: mode});
|
|
116
116
|
}
|
|
117
|
+
|
|
118
|
+
|
|
117
119
|
onMobilepushModeChange = (mode) => {
|
|
118
120
|
this.setState({ mobilePushCreateMode: mode});
|
|
119
121
|
}
|
|
@@ -479,17 +481,19 @@ class Creatives extends React.Component {
|
|
|
479
481
|
showFooter = true;
|
|
480
482
|
}
|
|
481
483
|
|
|
482
|
-
|
|
483
484
|
if (showFooter) {
|
|
484
|
-
if (slidBoxContent === "createTemplate" && ((channel === constants.EMAIL && currentStep === 'createTemplateContent') ||
|
|
485
|
+
if (slidBoxContent === "createTemplate" && ((channel === constants.EMAIL && currentStep === 'createTemplateContent') ||
|
|
486
|
+
([constants.SMS, constants.WECHAT].includes(channel) && currentStep === 'modeSelection'))) {
|
|
485
487
|
showFooter = showFooter && !this.state.isLoadingContent;
|
|
486
|
-
} else if (slidBoxContent === "editTemplate" &&
|
|
488
|
+
} else if (slidBoxContent === "editTemplate" &&
|
|
489
|
+
([constants.SMS, constants.WECHAT, constants.EMAIL].includes(channel) &&
|
|
490
|
+
currentStep === 'modeSelection')) {
|
|
487
491
|
showFooter = showFooter && !this.state.isLoadingContent;
|
|
488
492
|
}
|
|
489
493
|
}
|
|
490
494
|
|
|
491
495
|
const isLineViberChannel = templateData && [constants.LINE, constants.VIBER].includes(templateData);
|
|
492
|
-
if ([constants.LINE, constants.VIBER].includes(channel) || isLineViberChannel) {
|
|
496
|
+
if ([constants.LINE, constants.VIBER, constants.FACEBOOK].includes(channel) || isLineViberChannel) {
|
|
493
497
|
showFooter = false;
|
|
494
498
|
}
|
|
495
499
|
|
|
@@ -573,6 +577,13 @@ class Creatives extends React.Component {
|
|
|
573
577
|
}
|
|
574
578
|
return false;
|
|
575
579
|
}
|
|
580
|
+
shouldShowHeader = () => {
|
|
581
|
+
const {currentChannel} = this.state;
|
|
582
|
+
if (currentChannel === constants.FACEBOOK) {
|
|
583
|
+
return false;
|
|
584
|
+
}
|
|
585
|
+
return true;
|
|
586
|
+
}
|
|
576
587
|
render() {
|
|
577
588
|
const {slidBoxContent, isGetFormData, showSlideBox, templateData, currentChannel, emailCreateMode, templateStep, isLoadingContent, mobilePushCreateMode, isDiscardMessage, weChatTemplateType, weChatMaptemplateStep} = this.state;
|
|
578
589
|
const {isFullMode, creativesMode, cap, isUploading, channelsToHide, selectedWeChatAccount, forwardedTags, channelsToDisable, selectedOfferDetails, onTestContentClicked, onPreviewContentClicked, getCreativesData, fetchingCmsData, editor} = this.props;
|
|
@@ -582,7 +593,7 @@ class Creatives extends React.Component {
|
|
|
582
593
|
<SlideBoxWrapper className={classnames(`${classPrefix} ${isFullMode ? 'creatives-full-mode' : 'creatives-library-mode'} ${mapTemplateCreate ? 'map-template-create' : ''}`)}>
|
|
583
594
|
<CapSlideBox
|
|
584
595
|
header={
|
|
585
|
-
<SlideBoxHeader
|
|
596
|
+
this.shouldShowHeader() && <SlideBoxHeader
|
|
586
597
|
key="creatives-container-slidebox-header"
|
|
587
598
|
channel={currentChannel}
|
|
588
599
|
messages={this.props.messages}
|
|
@@ -599,8 +610,7 @@ class Creatives extends React.Component {
|
|
|
599
610
|
weChatTemplateType={weChatTemplateType}
|
|
600
611
|
showPrefix={!isUploading} // not show back button when email template is being uploaded
|
|
601
612
|
templateStep={this.creativesTemplateSteps[templateStep]}
|
|
602
|
-
/>
|
|
603
|
-
}
|
|
613
|
+
/>}
|
|
604
614
|
content={
|
|
605
615
|
<SlideBoxContent
|
|
606
616
|
key="creatives-container-slidebox-content"
|
|
@@ -609,6 +619,7 @@ class Creatives extends React.Component {
|
|
|
609
619
|
onPreviewTemplate={this.onPreviewTemplate}
|
|
610
620
|
slidBoxContent={slidBoxContent}
|
|
611
621
|
templateData={templateData}
|
|
622
|
+
campaignSettings={this.props.Templates.campaignSettings}
|
|
612
623
|
location={this.props.location}
|
|
613
624
|
messageDetails={this.props.messageDetails}
|
|
614
625
|
getFormData={this.getFormData}
|
|
@@ -54,7 +54,7 @@ import {
|
|
|
54
54
|
IMAGE_VIDEO,
|
|
55
55
|
NO_CALL_TO_ACTION,
|
|
56
56
|
} from './constant';
|
|
57
|
-
|
|
57
|
+
import cloneDeep from 'lodash/cloneDeep';
|
|
58
58
|
export const Advertisement = (props) => {
|
|
59
59
|
const CarouselContainer = styled.div`
|
|
60
60
|
width: ${(styledProps) => styledProps.width || '22px'};
|
|
@@ -122,11 +122,28 @@ export const Advertisement = (props) => {
|
|
|
122
122
|
type,
|
|
123
123
|
fileParams,
|
|
124
124
|
indexFile) => {
|
|
125
|
+
let videoData = {};
|
|
126
|
+
if (type === 'video') {
|
|
127
|
+
const {
|
|
128
|
+
orgUnitFacebookPageSettingsMap = {},
|
|
129
|
+
employeeAccessToken: accessToken = "",
|
|
130
|
+
accountId = "",
|
|
131
|
+
} = selectedFacebookAccount;
|
|
132
|
+
const { pageAccessToken, pageId: pId } = orgUnitFacebookPageSettingsMap[pageId] || {};
|
|
133
|
+
videoData = {
|
|
134
|
+
accessToken,
|
|
135
|
+
actId: accountId,
|
|
136
|
+
pageAccessToken,
|
|
137
|
+
pageId: pId,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
125
140
|
actions.uploadFbAdAsset(file,
|
|
126
141
|
type,
|
|
127
142
|
fileParams,
|
|
128
|
-
indexFile
|
|
129
|
-
|
|
143
|
+
indexFile,
|
|
144
|
+
videoData,
|
|
145
|
+
);
|
|
146
|
+
}, [pageId]);
|
|
130
147
|
|
|
131
148
|
const paramObj = params || {};
|
|
132
149
|
|
|
@@ -142,7 +159,7 @@ export const Advertisement = (props) => {
|
|
|
142
159
|
|
|
143
160
|
useEffect(() => {
|
|
144
161
|
if ((params && params.id) || (templateData || {}).edit) {
|
|
145
|
-
const { FacebookAd = [],
|
|
162
|
+
const { FacebookAd = [], pageOrgUnitId: editPageId} = get(templateData, `versions.base.content`) || get(fbADData, `templateDetails.versions.base.content`) || {};
|
|
146
163
|
const editMessageTitle = (templateData || {}).name || get(fbADData, 'templateDetails.name');
|
|
147
164
|
const editFBContent = Object.values(FacebookAd);
|
|
148
165
|
if (editPageId) {
|
|
@@ -182,6 +199,7 @@ export const Advertisement = (props) => {
|
|
|
182
199
|
videoName,
|
|
183
200
|
videoHeight,
|
|
184
201
|
videoWidth,
|
|
202
|
+
videoId,
|
|
185
203
|
} = obj.video;
|
|
186
204
|
data.videoData = {
|
|
187
205
|
videoSrc,
|
|
@@ -189,6 +207,7 @@ export const Advertisement = (props) => {
|
|
|
189
207
|
videoHeight,
|
|
190
208
|
videoWidth,
|
|
191
209
|
previewUrl,
|
|
210
|
+
videoId,
|
|
192
211
|
};
|
|
193
212
|
}
|
|
194
213
|
newCarouselData[index] = {...defaultCarouselContent, ...data};
|
|
@@ -248,14 +267,16 @@ export const Advertisement = (props) => {
|
|
|
248
267
|
}, [selectedAd]);
|
|
249
268
|
|
|
250
269
|
const updateOnImageReUpload = useCallback(() => {
|
|
251
|
-
const newCarouselData =
|
|
270
|
+
const newCarouselData = cloneDeep(carouselData);
|
|
252
271
|
newCarouselData[activeIndex].imageData.imageSrc = '';
|
|
253
272
|
updateCarouselData(newCarouselData);
|
|
254
273
|
}, [carouselData, activeIndex]);
|
|
255
274
|
|
|
256
275
|
const setUpdateImageSrc = useCallback((val) => {
|
|
257
|
-
const newCarouselData =
|
|
258
|
-
newCarouselData[activeIndex].imageData
|
|
276
|
+
const newCarouselData = cloneDeep(carouselData);
|
|
277
|
+
newCarouselData[activeIndex].imageData = {
|
|
278
|
+
imageSrc: val,
|
|
279
|
+
};
|
|
259
280
|
updateCarouselData(newCarouselData);
|
|
260
281
|
actions.clearFbAdAsset(activeIndex);
|
|
261
282
|
}, [carouselData, activeIndex]);
|
|
@@ -314,6 +335,7 @@ export const Advertisement = (props) => {
|
|
|
314
335
|
videoHeight,
|
|
315
336
|
videoWidth,
|
|
316
337
|
previewUrl,
|
|
338
|
+
videoId,
|
|
317
339
|
} = obj.videoData;
|
|
318
340
|
data.video = {
|
|
319
341
|
previewImageUrl: previewUrl,
|
|
@@ -322,6 +344,7 @@ export const Advertisement = (props) => {
|
|
|
322
344
|
baseUrl: previewUrl.replace('/1040', ''),
|
|
323
345
|
videoHeight,
|
|
324
346
|
videoWidth,
|
|
347
|
+
videoId,
|
|
325
348
|
};
|
|
326
349
|
}
|
|
327
350
|
messageData.push(data);
|
|
@@ -332,7 +355,7 @@ export const Advertisement = (props) => {
|
|
|
332
355
|
base: {
|
|
333
356
|
content: {
|
|
334
357
|
FacebookAd: {...messageData},
|
|
335
|
-
pageId,
|
|
358
|
+
pageOrgUnitId: pageId,
|
|
336
359
|
},
|
|
337
360
|
},
|
|
338
361
|
},
|
|
@@ -780,7 +803,7 @@ export const Advertisement = (props) => {
|
|
|
780
803
|
}, [pageId]);
|
|
781
804
|
|
|
782
805
|
const selectedFacebookAccount = get(facebookTemplateData, 'selectedFacebookAccount', {});
|
|
783
|
-
const {orgUnitFacebookPageSettingsMap = {}, accessToken = "", accountId = "" } = selectedFacebookAccount;
|
|
806
|
+
const {orgUnitFacebookPageSettingsMap = {}, employeeAccessToken: accessToken = "", accountId = "" } = selectedFacebookAccount;
|
|
784
807
|
|
|
785
808
|
const getPageAccessOrgs = useCallback(() => {
|
|
786
809
|
const {status, data } = fbADData.orgOuData || {};
|
|
@@ -865,17 +888,17 @@ export const Advertisement = (props) => {
|
|
|
865
888
|
>
|
|
866
889
|
{editNameState ? <CapInput
|
|
867
890
|
type="input"
|
|
868
|
-
|
|
891
|
+
className="cap-input-edit-name"
|
|
869
892
|
onBlur={onEditFocusOut}
|
|
870
893
|
defaultValue={messageTitle || ''}
|
|
871
894
|
/> : messageTitle
|
|
872
895
|
}
|
|
873
|
-
{!editNameState && <CapLink
|
|
874
|
-
style={{display: "inline-flex"}}
|
|
875
|
-
title={<FormattedMessage {...messages.creativesTemplatesEditName}/>}
|
|
876
|
-
onClick={onClickEditName}
|
|
877
|
-
/>}
|
|
878
896
|
</CapHeading>
|
|
897
|
+
{!editNameState && <CapLink
|
|
898
|
+
className="cap-link-edit-name"
|
|
899
|
+
title={<FormattedMessage {...messages.creativesTemplatesEditName}/>}
|
|
900
|
+
onClick={onClickEditName}
|
|
901
|
+
/>}
|
|
879
902
|
</div>
|
|
880
903
|
<CapColumn span={12}>
|
|
881
904
|
{isFullMode && <><CapHeading
|
|
@@ -18,7 +18,16 @@ $classPrefix: add-facebook-ad-section;
|
|
|
18
18
|
white-space: nowrap;
|
|
19
19
|
min-width: 112px;
|
|
20
20
|
max-width: 920px;
|
|
21
|
+
display: inline-block;
|
|
21
22
|
}
|
|
23
|
+
.cap-input-edit-name{
|
|
24
|
+
width: 500px;
|
|
25
|
+
}
|
|
26
|
+
.cap-link-edit-name{
|
|
27
|
+
display: inline-block;
|
|
28
|
+
margin-bottom: 4px;
|
|
29
|
+
}
|
|
30
|
+
|
|
22
31
|
.cap-header-facebook-ad{
|
|
23
32
|
position: fixed;
|
|
24
33
|
top: 27px;
|
|
@@ -17,7 +17,7 @@ export default defineMessages({
|
|
|
17
17
|
},
|
|
18
18
|
imageVideoDesc: {
|
|
19
19
|
id: `${messagePrefix}.imageVideoDesc`,
|
|
20
|
-
defaultMessage: 'Create an Ad with one image or video
|
|
20
|
+
defaultMessage: 'Create an Ad with one image or video',
|
|
21
21
|
},
|
|
22
22
|
carouselTitle: {
|
|
23
23
|
id: `${messagePrefix}.carouselTitle`,
|
|
@@ -93,7 +93,7 @@ export default defineMessages({
|
|
|
93
93
|
},
|
|
94
94
|
video_slideshow: {
|
|
95
95
|
id: `${messagePrefix}.video_slideshow`,
|
|
96
|
-
defaultMessage: 'Video
|
|
96
|
+
defaultMessage: 'Video',
|
|
97
97
|
},
|
|
98
98
|
doneButtonLabel: {
|
|
99
99
|
id: `${messagePrefix}.doneButtonLabel`,
|
|
@@ -6,8 +6,71 @@
|
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
8
|
GET_MARKETING_OBJECTIVES,
|
|
9
|
+
UPLOAD_FB_AD_ASSET_REQUEST,
|
|
10
|
+
CREATE_FACEBOOK_AD_TEMPLATE_REQUEST,
|
|
11
|
+
EDIT_FACEBOOK_AD_TEMPLATE_REQUEST,
|
|
12
|
+
GET_FACEBOOK_AD_TEMPLATE_DETAILS_REQUEST,
|
|
13
|
+
CLEAR_FACEBOOK_AD_ASSET,
|
|
14
|
+
CLEAR_FACEBOOK_AD_CREATE_RESPONSE_REQUEST,
|
|
15
|
+
CLEAR_FACEBOOK_AD_DATA,
|
|
16
|
+
CLEAR_FACEBOOK_AD_EDIT_RESPONSE_REQUEST,
|
|
17
|
+
GET_ORG_OU_LIST_REQUEST,
|
|
9
18
|
} from './constants';
|
|
10
19
|
|
|
11
20
|
export const getMarketingObjectives = () => ({
|
|
12
21
|
type: GET_MARKETING_OBJECTIVES,
|
|
13
22
|
});
|
|
23
|
+
|
|
24
|
+
export const uploadFbAdAsset = (file, assetType, fileParams, templateType, videoData) => ({
|
|
25
|
+
type: UPLOAD_FB_AD_ASSET_REQUEST,
|
|
26
|
+
file,
|
|
27
|
+
assetType,
|
|
28
|
+
fileParams,
|
|
29
|
+
templateType,
|
|
30
|
+
videoData,
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
export const createTemplate = (template, callback) => ({
|
|
34
|
+
type: CREATE_FACEBOOK_AD_TEMPLATE_REQUEST,
|
|
35
|
+
template,
|
|
36
|
+
callback,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
export const getOrgOUs = (orgID) => ({
|
|
40
|
+
type: GET_ORG_OU_LIST_REQUEST,
|
|
41
|
+
orgID,
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// FOR EDIT
|
|
45
|
+
|
|
46
|
+
export const editTemplate = (template, callback) => ({
|
|
47
|
+
type: EDIT_FACEBOOK_AD_TEMPLATE_REQUEST,
|
|
48
|
+
template,
|
|
49
|
+
callback,
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
export const getTemplateDetails = (id, callback) => ({
|
|
53
|
+
type: GET_FACEBOOK_AD_TEMPLATE_DETAILS_REQUEST,
|
|
54
|
+
id,
|
|
55
|
+
channel: 'FACEBOOK',
|
|
56
|
+
callback,
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
export const clearData = () => ({
|
|
60
|
+
type: CLEAR_FACEBOOK_AD_DATA,
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
export const clearEditResponse = () => ({
|
|
64
|
+
type: CLEAR_FACEBOOK_AD_EDIT_RESPONSE_REQUEST,
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
export const clearCreateResponse = () => ({
|
|
69
|
+
type: CLEAR_FACEBOOK_AD_CREATE_RESPONSE_REQUEST,
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
export const clearFbAdAsset = (templateType) => ({
|
|
73
|
+
type: CLEAR_FACEBOOK_AD_ASSET,
|
|
74
|
+
templateType,
|
|
75
|
+
});
|
|
76
|
+
|
|
@@ -4,12 +4,36 @@
|
|
|
4
4
|
*
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
const prefix = 'app/Facebook';
|
|
7
|
+
const prefix = 'app/v2Containers/Facebook';
|
|
8
8
|
|
|
9
9
|
export const GET_MARKETING_OBJECTIVES = `${prefix}/GET_MARKETING_OBJECTIVES`;
|
|
10
10
|
export const SET_MARKETING_OBJECTIVES_SUCCESS = `${prefix}/SET_MARKETING_OBJECTIVES_SUCCESS`;
|
|
11
11
|
export const SET_MARKETING_OBJECTIVES_FAILURE = `${prefix}/SET_MARKETING_OBJECTIVES_FAILURE`;
|
|
12
|
+
export const UPLOAD_FB_AD_ASSET_REQUEST = `${prefix}/UPLOAD_ASSET_REQUEST`;
|
|
13
|
+
export const UPLOAD_FB_AD_ASSET_SUCCESS = `${prefix}/UPLOAD_ASSET_SUCCESS`;
|
|
14
|
+
export const UPLOAD_FB_AD_ASSET_FAILURE = `${prefix}/UPLOAD_ASSET_FAILURE`;
|
|
15
|
+
export const CREATE_FACEBOOK_AD_TEMPLATE_REQUEST = `${prefix}/CREATE_FACEBOOK_AD_TEMPLATE_REQUEST`;
|
|
16
|
+
export const CREATE_FACEBOOK_AD_TEMPLATE_SUCCESS = `${prefix}/CREATE_FACEBOOK_AD_TEMPLATE_SUCCESS`;
|
|
17
|
+
export const CREATE_FACEBOOK_AD_TEMPLATE_FAILURE = `${prefix}/CREATE_FACEBOOK_AD_TEMPLATE_FAILURE`;
|
|
12
18
|
|
|
19
|
+
|
|
20
|
+
export const GET_FACEBOOK_AD_TEMPLATE_DETAILS_REQUEST = `${prefix}/EDIT/CREATE_FACEBOOK_AD_TEMPLATE_DETAILS_REQUEST`;
|
|
21
|
+
export const GET_FACEBOOK_AD_TEMPLATE_DETAILS_SUCCESS = `${prefix}/EDIT/CREATE_FACEBOOK_AD_TEMPLATE_DETAILS_SUCCESS`;
|
|
22
|
+
export const GET_FACEBOOK_AD_TEMPLATE_DETAILS_FAILURE = `${prefix}/EDIT/CREATE_FACEBOOK_AD_TEMPLATE_DETAILS_FAILURE`;
|
|
23
|
+
|
|
24
|
+
export const EDIT_FACEBOOK_AD_TEMPLATE_REQUEST = `${prefix}/Edit/EDIT_FACEBOOK_AD_TEMPLATE_REQUEST`;
|
|
25
|
+
export const EDIT_FACEBOOK_AD_TEMPLATE_SUCCESS = `${prefix}/Edit/EDIT_FACEBOOK_AD_TEMPLATE_SUCCESS`;
|
|
26
|
+
export const EDIT_FACEBOOK_AD_TEMPLATE_FAILURE = `${prefix}/Edit/EDIT_FACEBOOK_AD_TEMPLATE_FAILURE`;
|
|
27
|
+
|
|
28
|
+
export const CLEAR_FACEBOOK_AD_EDIT_RESPONSE_REQUEST = `${prefix}/Edit/CLEAR_EDIT_RESPONSE_REQUEST`;
|
|
29
|
+
export const CLEAR_FACEBOOK_AD_DATA = `${prefix}/Edit/CLEAR_DATA`;
|
|
30
|
+
export const CLEAR_FACEBOOK_AD_CREATE_RESPONSE_REQUEST = `${prefix}/Create/CLEAR_EDIT_RESPONSE_REQUEST`;
|
|
31
|
+
export const CLEAR_FACEBOOK_AD_ASSET = `${prefix}/CLEAR_ASSET`;
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
export const GET_ORG_OU_LIST_REQUEST = `${prefix}/GET_ORG_OU_LIST_REQUEST`;
|
|
35
|
+
export const GET_ORG_OU_LIST_SUCCESS = `${prefix}/GET_ORG_OU_LIST_SUCCESS`;
|
|
36
|
+
export const GET_ORG_OU_LIST_FAILURE = `${prefix}/GET_ORG_OU_LIST_FAILURE`;
|
|
13
37
|
// marketing objectives constants
|
|
14
38
|
|
|
15
39
|
export const VALUE_APP_INSTALLS = 'VALUE_APP_INSTALLS';
|