@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.
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
@@ -0,0 +1,299 @@
1
+ /**
2
+ *
3
+ * CapVideoUpload
4
+ *
5
+ */
6
+ import React, { useCallback, useState, Fragment, useRef, useEffect } from 'react';
7
+ import PropTypes from "prop-types";
8
+ import get from 'lodash/get';
9
+ import CapDrawer from '@capillarytech/cap-ui-library/CapDrawer';
10
+ import { injectIntl, FormattedMessage, intlShape } from 'react-intl';
11
+ import moment from 'moment';
12
+ import isEmpty from 'lodash/isEmpty';
13
+ import messages from './messages';
14
+ import {
15
+ CapHeading,
16
+ CapButton,
17
+ CapError,
18
+ CapUploader,
19
+ CapSpin,
20
+ } from '@capillarytech/cap-ui-library';
21
+ import {bytes2Size} from '../../utils/common';
22
+ import './index.scss';
23
+
24
+ function CapVideoUpload(props) {
25
+ const {
26
+ supportedExtensions,
27
+ allowedExtensionsRegex,
28
+ videoSize,
29
+ intl,
30
+ uploadAsset,
31
+ uploadedAssetList = {},
32
+ style,
33
+ onVideoUploadUpdateAssestList,
34
+ index,
35
+ videoData,
36
+ } = props;
37
+ const [isVideoError, updateVideoErrorMessage] = useState(false);
38
+ const [isVideo, updateVideoStatus] = useState(false);
39
+ const [videoDuration, updateVideoDuration] = useState('');
40
+ const [isPlaying, updateIsPlaying] = useState(false);
41
+ const [isSpinning, setSpinning] = useState(false);
42
+
43
+
44
+ const videoEl = useRef(null);
45
+ const {
46
+ videoSrc = '',
47
+ videoName,
48
+ previewUrl,
49
+ videoHeight,
50
+ videoWidth,
51
+ } = uploadedAssetList;
52
+
53
+ const [isTemplateDrawerRequired, updateTemplateDrawerRequirement] = useState(false);
54
+
55
+ const uploadVideo = useCallback((e, { files }) => {
56
+ if (e) {
57
+ e.preventDefault();
58
+ }
59
+ const _URL = window.URL || window.webkitURL;
60
+ let incorrectFile = false;
61
+ const file = files[0];
62
+ if (!allowedExtensionsRegex.test(file.name)) {
63
+ incorrectFile = true;
64
+ }
65
+ const video = new FileReader();
66
+ video.src = _URL.createObjectURL(file);
67
+ const fileParams = {
68
+ width: video.width,
69
+ height: video.height,
70
+ error: false,
71
+ isGenerateVideoThumbnail: true,
72
+ };
73
+ submitVideoAction({ file, type: 'video', fileParams }, incorrectFile);
74
+ if (e) {
75
+ const event = e;
76
+ event.target.value = null;
77
+ }
78
+ }, []);
79
+
80
+ useEffect(() => {
81
+ if (videoData[`uploadedAssetDataVideo_${index}`] && Object.keys(videoData[`uploadedAssetDataVideo_${index}`]).length) {
82
+ const metaVideoSrc = get(videoData, `uploadedAssetDataVideo_${index}.metaInfo.secure_file_path`, '');
83
+ const previewImgUrl = get(videoData, `uploadedAssetDataVideo_${index}.metaInfo.video_file_path_preview`, '');
84
+ const metaVideoName = get(videoData, `uploadedAssetDataVideo_${index}.metaInfo.name`, '');
85
+ if (metaVideoSrc && videoSrc === "") {
86
+ onVideoUploadUpdateAssestList(index, {
87
+ previewUrl: previewImgUrl,
88
+ videoSrc: metaVideoSrc,
89
+ videoName: metaVideoName,
90
+ },
91
+ );
92
+ }
93
+ }
94
+ }, [videoData[`uploadedAssetDataVideo_${index}`]]);
95
+
96
+ useEffect(() => {
97
+ if (videoData[`assetUploadingVideo_${index}`] && videoData[`assetUploading`] !== false) {
98
+ const isSpinner = get(videoData, `assetUploadingVideo_${index}`, false);
99
+ setSpinning(isSpinner);
100
+ }
101
+ }, [videoData[`assetUploadingVideo_${index}`]]);
102
+
103
+ useEffect(() => {
104
+ if (!isEmpty(uploadedAssetList)) {
105
+ const {
106
+ videoSrc: metaVideoSrc = '',
107
+ } = uploadedAssetList || {};
108
+ if (metaVideoSrc) {
109
+ updateVideoStatus(true);
110
+ }
111
+ }
112
+ }, [uploadedAssetList]);
113
+
114
+ const submitVideoAction = useCallback((data, incorrectFile) => {
115
+ const {
116
+ file: {
117
+ size,
118
+ },
119
+ file,
120
+ fileParams,
121
+ type,
122
+ } = data;
123
+ if (incorrectFile || size > videoSize) {
124
+ updateVideoErrorMessage(formatMessage(messages.videoIncorrectSize));
125
+ } else {
126
+ updateVideoErrorMessage('');
127
+ uploadAsset(
128
+ file,
129
+ type,
130
+ fileParams,
131
+ `Video_${index}`,
132
+ );
133
+ }
134
+ }, [isVideoError]);
135
+
136
+ const {
137
+ formatMessage,
138
+ } = intl || {};
139
+
140
+ const capUploaderCustomVideoRequest = useCallback((uploadData) => {
141
+ uploadVideo(undefined, { files: [uploadData.file] });
142
+ }, []);
143
+
144
+ const playVideo = useCallback((e) => {
145
+ if (e.target.paused && !isPlaying) {
146
+ e.target.play();
147
+ }
148
+ }, [isPlaying]);
149
+
150
+ const pauseVideo = useCallback((e) => {
151
+ if (!e.target.paused && isPlaying) {
152
+ e.target.pause();
153
+ }
154
+ }, []);
155
+
156
+ const getVideoSection = () => {
157
+ if (!isVideo) {
158
+ return (
159
+ (
160
+ <>
161
+ <CapUploader.CapDragger
162
+ customRequest={(data) => capUploaderCustomVideoRequest(data)}
163
+ className="form-builder-dragger"
164
+ >
165
+ <CapHeading className="dragger-title" type="h7">
166
+ <FormattedMessage {...messages.dragAndDrop} />
167
+ </CapHeading>
168
+ <CapHeading className="dragger-or" type="label6">
169
+ <FormattedMessage {...messages.or} />
170
+ </CapHeading>
171
+ <CapButton className="dragger-button upload-video" type="secondary">
172
+ <FormattedMessage {...messages.uploadComputer} />
173
+ </CapButton>
174
+ </CapUploader.CapDragger>
175
+ <CapError type="error" className="upload-video-error">
176
+ {isVideoError}
177
+ </CapError>
178
+ </>
179
+ )
180
+ );
181
+ }
182
+ const onReUpload = () => {
183
+ updateVideoStatus(false);
184
+ onVideoUploadUpdateAssestList(
185
+ index,
186
+ {
187
+ previewUrl,
188
+ videoName,
189
+ videoHeight,
190
+ videoWidth,
191
+ videoSrc,
192
+ videoDuration,
193
+ }
194
+ );
195
+ };
196
+
197
+ const updateMetadataLoaded = () => {
198
+ const { current: { duration, videoHeight: metaVideoHeight, videoWidth: metaVideoWidth } = {} } = videoEl;
199
+ if (duration) {
200
+ const value = moment('1900-01-01 00:00:00').add(duration, 'seconds').format("HH.mm.ss"); // to get the duration of video
201
+ updateVideoDuration(value);
202
+ if (videoWidth === undefined && videoHeight === undefined) {
203
+ onVideoUploadUpdateAssestList(
204
+ index,
205
+ {
206
+ videoSrc,
207
+ videoName,
208
+ videoHeight: metaVideoHeight,
209
+ videoWidth: metaVideoWidth,
210
+ previewUrl,
211
+ }
212
+ );
213
+ }
214
+ }
215
+ };
216
+
217
+ return (
218
+ <Fragment key={videoSrc}>
219
+ <div style={{ overflow: 'hidden' }}>
220
+ <CapButton
221
+ className="dragger-button video-reupload"
222
+ type="flat"
223
+ onClick={onReUpload}
224
+ >
225
+ <FormattedMessage {...messages.imageReUpload} />
226
+ </CapButton>
227
+ </div>
228
+ <div style={{ display: 'flex' }}>
229
+ <video
230
+ width="230"
231
+ poster={previewUrl}
232
+ className="line-image-src"
233
+ key={`${index}-video`}
234
+ onLoadedMetadata={() => updateMetadataLoaded()}
235
+ onPlaying={() => updateIsPlaying(true)}
236
+ onPause={() => updateIsPlaying(false)}
237
+ onMouseOver={playVideo}
238
+ onMouseOut={pauseVideo}
239
+ ref={videoEl}
240
+ >
241
+ <source src={videoSrc} type="video/mp4" />
242
+ </video>
243
+ <div className="video-info">
244
+ <CapHeading type="h6">
245
+ {videoName}
246
+ </CapHeading>
247
+ <CapHeading type="h6">
248
+ {videoDuration}
249
+ </CapHeading>
250
+ </div>
251
+ </div>
252
+ </Fragment>
253
+ );
254
+ };
255
+ return (
256
+ <CapSpin spinning={isSpinning}>
257
+ <div style={style} className="cap-custom-video-upload">
258
+ <form encType="multipart/form-data" id={`form`} className="video-form">
259
+ <input
260
+ key={`videoFile`}
261
+ style={{ display: 'none' }}
262
+ id="fileName"
263
+ type="file"
264
+ onChange={(e) => uploadVideo(e, { files: e.target.files })}
265
+ accept={supportedExtensions || "video/*"}
266
+ />
267
+ {getVideoSection()}
268
+ <CapDrawer
269
+ visible={isTemplateDrawerRequired}
270
+ width={624}
271
+ onClose={() => updateTemplateDrawerRequirement(false)}
272
+ />
273
+ </form>
274
+ <CapHeading.CapHeadingSpan type="h6" className="video-description">
275
+ <FormattedMessage {...messages.videoRatioDescription} />
276
+
277
+ </CapHeading.CapHeadingSpan>
278
+ <CapHeading.CapHeadingSpan type="h6" className="video-description video-details">
279
+ <FormattedMessage {...messages.videoSizeDescription} values={{size: bytes2Size(videoSize)}} />
280
+ </CapHeading.CapHeadingSpan>
281
+ </div>
282
+ </CapSpin>
283
+ );
284
+ }
285
+
286
+ CapVideoUpload.propTypes = {
287
+ supportedExtensions: PropTypes.any,
288
+ allowedExtensionsRegex: PropTypes.string,
289
+ videoSize: PropTypes.string,
290
+ intl: intlShape,
291
+ uploadAsset: PropTypes.func,
292
+ uploadedAssetList: PropTypes.object,
293
+ style: PropTypes.any,
294
+ onVideoUploadUpdateAssestList: PropTypes.func,
295
+ index: PropTypes.number,
296
+ videoData: PropTypes.object,
297
+ };
298
+
299
+ export default injectIntl(CapVideoUpload);
@@ -0,0 +1,29 @@
1
+ @import '~@capillarytech/cap-ui-library/styles/_variables.scss';
2
+
3
+ $classPrefix: cap-custom-video-upload;
4
+
5
+ .#{$classPrefix} {
6
+ .upload-video{
7
+ margin-right: $CAP_SPACE_08;
8
+ }
9
+ .upload-video-error{
10
+ margin-top: $CAP_SPACE_04;
11
+ }
12
+ .video-reupload{
13
+ float: right;
14
+ color: $FONT_COLOR_05;
15
+ padding: 0px;
16
+ right: 40px;
17
+ }
18
+ .video-info{
19
+ margin-left: $CAP_SPACE_24;
20
+ }
21
+ .video-form{
22
+ width: 500px;
23
+ }
24
+ .video-details{
25
+ float: right;
26
+ position: absolute;
27
+ right: 40px;
28
+ }
29
+ }
@@ -0,0 +1,54 @@
1
+ /*
2
+ * CapVideoUpload Messages
3
+ *
4
+ * This contains all the text for the CapVideoUpload component.
5
+ */
6
+ import { defineMessages } from 'react-intl';
7
+ const scope = 'app.components.CapVideoUpload';
8
+
9
+ export default defineMessages({
10
+ textMessageAddLabel: {
11
+ id: `${scope}.textMessageAddLabel`,
12
+ defaultMessage: 'How do you want to upload the image?',
13
+ },
14
+ textMessageCreateNew: {
15
+ id: `${scope}.textMessageCreateNew`,
16
+ defaultMessage: 'Create new',
17
+ },
18
+ textMessageSelectTemplate: {
19
+ id: `${scope}.textMessageSelectTemplate`,
20
+ defaultMessage: 'Select template',
21
+ },
22
+ textMessageORLabel: {
23
+ id: `${scope}.textMessageORLabel`,
24
+ defaultMessage: 'OR',
25
+ },
26
+ uploadComputer: {
27
+ id: `${scope}.uploadComputer`,
28
+ defaultMessage: 'Your computer',
29
+ },
30
+ or: {
31
+ id: `${scope}.or`,
32
+ defaultMessage: 'OR',
33
+ },
34
+ dragAndDrop: {
35
+ id: `${scope}.dragAndDrop`,
36
+ defaultMessage: 'Drag and drop video here',
37
+ },
38
+ videoIncorrectSize: {
39
+ id: `${scope}.videoIncorrectSize`,
40
+ defaultMessage: 'This file format/size is not supported.',
41
+ },
42
+ videoRatioDescription: {
43
+ id: `${scope}.videoRatioDescription`,
44
+ defaultMessage: 'Video ratio: 9:16 to 16:9',
45
+ },
46
+ videoSizeDescription: {
47
+ id: `${scope}.videoSizeDescription`,
48
+ defaultMessage: 'File size: Up to {size}',
49
+ },
50
+ imageReUpload: {
51
+ id: `${scope}.imageReUpload`,
52
+ defaultMessage: 'Re upload',
53
+ },
54
+ });
@@ -16,7 +16,7 @@ import {updateCharCount} from '../../utils/smsCharCountV2';
16
16
  import messages from './messages';
17
17
  import { WECHAT } from '../../v2Containers/CreativesContainer/constants';
18
18
  import Carousel from '../Carousel';
19
- import { VIBER } from '../../v2Containers/App/constants';
19
+ import { VIBER, FACEBOOK } from '../../v2Containers/App/constants';
20
20
  const wechatBodyNew = require('./assets/images/wechat_mobile_android.svg');
21
21
  const smsMobileAndroid = require('./assets/images/sms_mobile_android.svg');
22
22
  const lineMobileAndroid = require('../../assets/line.png');
@@ -30,6 +30,7 @@ const iPhonePushMessagePhone = require('./assets/images/iPhonePushMessage.svg');
30
30
 
31
31
  import { CAP_COLOR_03, CAP_WHITE, FONT_COLOR_01, CAP_G08, CAP_G06, CAP_G15, CAP_PURPLE01, CAP_G16 } from '@capillarytech/cap-ui-library/styled/variables';
32
32
  import { TEMPLATE, IMAGE_CAROUSEL, IMAGE, STICKER, TEXT, IMAGE_MAP, VIDEO } from '../../v2Containers/Line/Container/constants';
33
+ import CapFacebookPreview from '../../v2Containers/CapFacebookPreview';
33
34
 
34
35
  class TemplatePreview extends React.Component { // eslint-disable-line react/prefer-stateless-function
35
36
  onPreviewContentClicked = (channel) => {
@@ -260,7 +261,7 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
260
261
 
261
262
  return (
262
263
  <CapRow>
263
- {this.props.showCount && <CapColumn span={16}>
264
+ {this.props.showCount && (channel && channel.toLowerCase() !== FACEBOOK) && <CapColumn span={16}>
264
265
  {channel && channel.toLowerCase() === 'sms' && <CapHeading type="h3">
265
266
  <FormattedMessage {...messages.charactersTotal} values={{smsCount: smsDetails.parts, charCount: smsDetails.chars_used}}/>
266
267
  {smsDetails.unicode &&
@@ -637,6 +638,18 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
637
638
  </div>
638
639
  ) : ''
639
640
  }
641
+ {channel && channel.toLowerCase() === FACEBOOK && (
642
+ <div style={{position: 'absolute', left: '80%'}} id="facebook-preview">
643
+ <CapFacebookPreview
644
+ disablePreviewButton={false}
645
+ selectedAd={content.selectedAd}
646
+ previewData={content.previewData}
647
+ primaryText={content.primaryText}
648
+ callToAction={content.callToAction}
649
+ displayLink={content.displayLink}
650
+ />
651
+ </div>
652
+ )}
640
653
  </div>
641
654
 
642
655
  </CapColumn>
@@ -660,6 +673,10 @@ TemplatePreview.propTypes = {
660
673
  onPreviewContentClicked: PropTypes.func,
661
674
  onTestContentClicked: PropTypes.func,
662
675
  showTestAndPreviewIcon: PropTypes.bool,
676
+ fbContent: PropTypes.oneOfType([
677
+ PropTypes.object,
678
+ PropTypes.any,
679
+ ]),
663
680
  };
664
681
 
665
682
  export default (injectIntl(TemplatePreview));
@@ -25,6 +25,8 @@ export const EDIT = 'edit';
25
25
  export const PREVIEW = 'preview';
26
26
 
27
27
  export const VIBER = 'viber';
28
+ export const FACEBOOK = 'facebook';
29
+
28
30
  export const TRACK_EDIT_SMS = 'editSms';
29
31
  export const TRACK_EDIT_EMAIL = 'editEmail';
30
32
  export const TRACK_EDIT_MPUSH = 'editMpush';
@@ -54,3 +56,22 @@ export const BEE_PLUGIN = 'BEE_PLUGIN';
54
56
  export const NO_COMMUNICATION = 'NO_COMMUNICATION';
55
57
  export const FTP = 'FTP';
56
58
  export const CREATIVES_UI_VIEW = 'CREATIVES_UI_VIEW';
59
+
60
+ export const APPLY_NOW = <FormattedMessage {...globalMessages.applyNow} />;
61
+ export const NO_CALL_TO_ACTION = <FormattedMessage {...globalMessages.noCallToAction} />;
62
+ export const LEARN_MORE = <FormattedMessage {...globalMessages.learnMore} />;
63
+ export const SHOP_NOW = <FormattedMessage {...globalMessages.shopNow} />;
64
+ export const SIGN_UP = <FormattedMessage {...globalMessages.signUp} />;
65
+ export const SUBSCRIBE = <FormattedMessage {...globalMessages.subscribe} />;
66
+ export const WATCH_MORE = <FormattedMessage {...globalMessages.watchMore} />;
67
+
68
+
69
+ export const FB_AD_CALL_TO_ACTION = {
70
+ NO_CALL_TO_ACTION,
71
+ APPLY_NOW,
72
+ LEARN_MORE,
73
+ SHOP_NOW,
74
+ SIGN_UP,
75
+ SUBSCRIBE,
76
+ WATCH_MORE,
77
+ };
@@ -113,4 +113,34 @@ export default defineMessages({
113
113
  id: `creatives.containersV2.newOrgName`,
114
114
  defaultMessage: '{newOrgName}',
115
115
  },
116
+ "applyNow": {
117
+ id: `creatives.containersV2.applyNow`,
118
+ defaultMessage: 'Apply now',
119
+ },
120
+ "noCallToAction": {
121
+ id: `creatives.containersV2.noCallToAction`,
122
+ defaultMessage: 'No call to action',
123
+ },
124
+ "learnMore": {
125
+ id: `creatives.containersV2.learnMore`,
126
+ defaultMessage: 'Learn More',
127
+ },
128
+ "shopNow": {
129
+ id: `creatives.containersV2.shopNow`,
130
+ defaultMessage: 'Shop Now',
131
+ },
132
+ "signUp": {
133
+ id: `creatives.containersV2.signUp`,
134
+ defaultMessage: 'Sign Up',
135
+ },
136
+ "subscribe": {
137
+ id: `creatives.containersV2.subscribe`,
138
+ defaultMessage: 'Subscribe',
139
+ },
140
+ "watchMore": {
141
+ id: `creatives.containersV2.watchMore`,
142
+ defaultMessage: 'Watch More',
143
+ },
144
+
116
145
  });
146
+
@@ -0,0 +1,31 @@
1
+ /*
2
+ *
3
+ * CapFacebookPreview actions
4
+ *
5
+ */
6
+
7
+ import {
8
+ GENERATE_IMAGE_PREVIEW_REQUEST,
9
+ GENERATE_VIDEO_PREVIEW_REQUEST,
10
+ GENERATE_CAROUSEL_PREVIEW_REQUEST,
11
+ CLEAR_PREVIEW,
12
+ } from './constants';
13
+
14
+ export const getImagePreview = (previewData) => ({
15
+ type: GENERATE_IMAGE_PREVIEW_REQUEST,
16
+ previewData,
17
+ });
18
+
19
+ export const getVideoPreview = (previewData) => ({
20
+ type: GENERATE_VIDEO_PREVIEW_REQUEST,
21
+ previewData,
22
+ });
23
+
24
+ export const getCarouselPreview = (previewData) => ({
25
+ type: GENERATE_CAROUSEL_PREVIEW_REQUEST,
26
+ previewData,
27
+ });
28
+
29
+ export const clearPreview = () => ({
30
+ type: CLEAR_PREVIEW,
31
+ });
@@ -0,0 +1,21 @@
1
+ /*
2
+ *
3
+ * CapFacebookPreview constants
4
+ *
5
+ */
6
+
7
+
8
+ export const GENERATE_IMAGE_PREVIEW_REQUEST = 'app/CapFacebookPreview/GET_IMAGE_PREVIEW_REQUEST';
9
+ export const GENERATE_IMAGE_PREVIEW_SUCCESS = 'app/CapFacebookPreview/GET_IMAGE_PREVIEW_SUCCESS';
10
+ export const GENERATE_IMAGE_PREVIEW_FAILURE = 'app/CapFacebookPreview/GET_IMAGE_PREVIEW_FAILURE';
11
+
12
+ export const GENERATE_VIDEO_PREVIEW_REQUEST = 'app/CapFacebookPreview/GET_VIDEO_PREVIEW_REQUEST';
13
+ export const GENERATE_VIDEO_PREVIEW_SUCCESS = 'app/CapFacebookPreview/GET_VIDEO_PREVIEW_SUCCESS';
14
+ export const GENERATE_VIDEO_PREVIEW_FAILURE = 'app/CapFacebookPreview/GET_VIDEO_PREVIEW_FAILURE';
15
+
16
+ export const GENERATE_CAROUSEL_PREVIEW_REQUEST = 'app/CapFacebookPreview/GET_CAROUSEL_PREVIEW_REQUEST';
17
+ export const GENERATE_CAROUSEL_PREVIEW_SUCCESS = 'app/CapFacebookPreview/GET_CAROUSEL_PREVIEW_SUCCESS';
18
+ export const GENERATE_CAROUSEL_PREVIEW_FAILURE = 'app/CapFacebookPreview/GET_CAROUSEL_PREVIEW_FAILURE';
19
+
20
+ export const CLEAR_PREVIEW = 'app/CapFacebookPreview/CLEAR_PREVIEW';
21
+