@capillarytech/creatives-library 6.8.8 → 6.9.1
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/components/CapTagList/index.js +1 -1
- package/components/Edmeditor/index.js +1 -1
- package/components/FormBuilder/index.js +0 -1
- package/components/TemplatePreview/_templatePreview.scss +0 -6
- package/components/TemplatePreview/index.js +28 -35
- package/config/app.js +1 -1
- package/containers/TagList/index.js +3 -3
- package/index.html +5 -0
- package/package.json +2 -1
- package/services/api.js +16 -1
- package/v2Components/BeeEditor/index.js +278 -0
- package/v2Components/BeeEditor/index.scss +11 -0
- package/v2Components/BeeEditor/messages.js +47 -0
- package/v2Components/BeeEditor/tests/index.test.js +10 -0
- package/v2Components/CapTagList/index.js +55 -26
- package/v2Components/CmsTemplatesComponent/index.js +4 -4
- package/v2Components/Edmeditor/index.js +1 -1
- package/v2Components/EmailPreview/_emailPreview.scss +2 -2
- package/v2Components/FormBuilder/index.js +117 -43
- package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/_wechatRichmediaTemplatePrev.scss +151 -151
- package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/messages.js +33 -33
- package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/tests/index.test.js +10 -10
- package/v2Components/TemplatePreview/_templatePreview.scss +0 -1
- package/v2Components/TemplatePreview/assets/images/androidPushMessage.svg +44 -44
- package/v2Components/TemplatePreview/assets/images/home-screen-android.svg +21 -21
- package/v2Components/TemplatePreview/assets/images/home-screen-ios.svg +16 -16
- package/v2Components/TemplatePreview/assets/images/iPhonePushMessage.svg +134 -134
- package/v2Components/TemplatePreview/assets/images/mobile.svg +23 -23
- package/v2Components/TemplatePreview/assets/images/sms_mobile_android.svg +22 -22
- package/v2Components/TemplatePreview/assets/images/user-icon.svg +18 -18
- package/v2Components/TemplatePreview/assets/images/wechat-home-screen-android.svg +21 -21
- package/v2Components/TemplatePreview/assets/images/wechat-mobile.svg +77 -77
- package/v2Components/TemplatePreview/assets/images/wechat_mobile_android.svg +20 -20
- package/v2Components/TemplatePreview/index.js +29 -36
- package/v2Components/TemplatePreview/tests/index.test.js +10 -10
- package/v2Containers/CreativesContainer/SlideBoxContent.js +1 -7
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +51 -51
- package/v2Containers/CreativesContainer/actions.js +27 -27
- package/v2Containers/CreativesContainer/constants.js +17 -17
- package/v2Containers/CreativesContainer/index.js +7 -2
- package/v2Containers/CreativesContainer/index.scss +44 -44
- package/v2Containers/CreativesContainer/messages.js +305 -305
- package/v2Containers/CreativesContainer/reducer.js +29 -29
- package/v2Containers/CreativesContainer/sagas.js +11 -11
- package/v2Containers/CreativesContainer/selectors.js +30 -30
- package/v2Containers/CreativesContainer/tests/actions.test.js +18 -18
- package/v2Containers/CreativesContainer/tests/index.test.js +10 -10
- package/v2Containers/CreativesContainer/tests/reducer.test.js +9 -9
- package/v2Containers/CreativesContainer/tests/sagas.test.js +15 -15
- package/v2Containers/CreativesContainer/tests/selectors.test.js +10 -10
- package/v2Containers/Email/constants.js +1 -0
- package/v2Containers/Email/index.js +210 -108
- package/v2Containers/Email/initialSchema.js +18 -3
- package/v2Containers/Email/sagas.js +2 -2
- package/v2Containers/Email/selectors.js +5 -0
- package/v2Containers/EmailWrapper/index.js +19 -3
- package/v2Containers/Line/Container/Image/index.js +19 -21
- package/v2Containers/Line/Container/ImageMap/constants.js +1 -2
- package/v2Containers/Line/Container/ImageMap/index.js +6 -31
- package/v2Containers/Line/Container/ImageMap/messages.js +0 -12
- package/v2Containers/Line/Container/Wrapper/index.js +1 -5
- package/v2Containers/Line/Container/Wrapper/messages.js +0 -4
- package/v2Containers/Line/Container/Wrapper/utils.js +16 -15
- package/v2Containers/Line/Container/_lineCreate.scss +2 -2
- package/v2Containers/Line/Container/actions.js +2 -4
- package/v2Containers/Line/Container/constants.js +0 -3
- package/v2Containers/Line/Container/index.js +11 -49
- package/v2Containers/Line/Container/reducer.js +2 -2
- package/v2Containers/Line/Container/sagas.js +2 -2
- package/v2Containers/Line/Container/style.js +1 -2
- package/v2Containers/TagList/index.js +6 -0
- package/v2Containers/Templates/_templates.scss +0 -9
- package/v2Containers/Templates/actions.js +122 -117
- package/v2Containers/Templates/constants.js +49 -47
- package/v2Containers/Templates/index.js +34 -42
- package/v2Containers/Templates/messages.js +8 -4
- package/v2Containers/Templates/reducer.js +153 -145
- package/v2Containers/Templates/sagas.js +179 -179
- package/v2Containers/Templates/selectors.js +19 -1
- package/v2Containers/Templates/tests/actions.test.js +18 -18
- package/v2Containers/Templates/tests/index.test.js +10 -10
- package/v2Containers/Templates/tests/reducer.test.js +9 -9
- package/v2Containers/Templates/tests/sagas.test.js +15 -15
- package/v2Containers/Templates/tests/selectors.test.js +10 -10
- package/v2Containers/TemplatesV2/TemplatesV2.style.js +29 -29
- package/v2Containers/TemplatesV2/actions.js +16 -16
- package/v2Containers/TemplatesV2/constants.js +10 -10
- package/v2Containers/TemplatesV2/messages.js +61 -61
- package/v2Containers/TemplatesV2/selectors.js +25 -25
- package/v2Containers/TemplatesV2/tests/actions.test.js +18 -18
- package/v2Containers/TemplatesV2/tests/index.test.js +10 -10
- package/v2Containers/TemplatesV2/tests/reducer.test.js +9 -9
- package/v2Containers/TemplatesV2/tests/sagas.test.js +15 -15
- package/v2Containers/TemplatesV2/tests/selectors.test.js +10 -10
- package/v2Components/Carousel/index.js +0 -120
- package/v2Components/Carousel/style.scss +0 -40
- package/v2Containers/Line/Container/ImageCarousel/Content.js +0 -554
- package/v2Containers/Line/Container/ImageCarousel/constants.js +0 -10
- package/v2Containers/Line/Container/ImageCarousel/index.js +0 -526
- package/v2Containers/Line/Container/ImageCarousel/messages.js +0 -178
- package/v2Containers/Line/Container/ImageCarousel/style.js +0 -61
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="220" height="472" viewBox="0 0 220 472">
|
|
2
|
-
<g fill="none" fill-rule="evenodd">
|
|
3
|
-
<rect width="220" height="472" fill="#101211" rx="26"/>
|
|
4
|
-
<rect width="202" height="404" x="9" y="36" fill="#F4F5F7" rx="9"/>
|
|
5
|
-
<rect width="182" height="136" x="19" y="112" fill="#F4F5F7" rx="17.5"/>
|
|
6
|
-
<path fill="#F4F5F7" d="M18 36h184c4.97 0 9 4.03 9 9v6H9v-6c0-4.97 4.03-9 9-9z"/>
|
|
7
|
-
<path fill="#F4F5F7" d="M9 51H211V82H9z" transform="matrix(1 0 0 -1 0 133)"/>
|
|
8
|
-
<rect width="52" height="5" x="84" y="14" fill="#2E2E2E" rx="2.5"/>
|
|
9
|
-
<rect width="52" height="5" x="84" y="455" fill="#2E2E2E" rx="2.5"/>
|
|
10
|
-
<circle cx="45.5" cy="19.5" r="5.5" fill="#2E2E2E"/>
|
|
11
|
-
<circle cx="65.5" cy="19.5" r="3.5" fill="#2E2E2E"/>
|
|
12
|
-
<text fill="#000" font-family="Roboto-Regular, Roboto" font-size="12" letter-spacing=".175">
|
|
13
|
-
<tspan x="49.5" y="71">Muji India</tspan>
|
|
14
|
-
</text>
|
|
15
|
-
<circle cx="199" cy="63" r="1" fill="#000"/>
|
|
16
|
-
<circle cx="199" cy="70" r="1" fill="#000"/>
|
|
17
|
-
<circle cx="199" cy="66.5" r="1" fill="#000"/>
|
|
18
|
-
<path fill="#000" d="M28 66c0 .279-.226.505-.505.505h-5.556l2.42 2.42c.198.197.198.518 0 .716-.198.198-.52.198-.718 0l-2.934-2.934c-.39-.39-.39-1.024 0-1.414l2.934-2.934c.198-.198.52-.198.718 0 .198.198.198.519 0 .717l-2.42 2.419h5.556c.279 0 .505.226.505.505z"/>
|
|
19
|
-
</g>
|
|
20
|
-
</svg>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="220" height="472" viewBox="0 0 220 472">
|
|
2
|
+
<g fill="none" fill-rule="evenodd">
|
|
3
|
+
<rect width="220" height="472" fill="#101211" rx="26"/>
|
|
4
|
+
<rect width="202" height="404" x="9" y="36" fill="#F4F5F7" rx="9"/>
|
|
5
|
+
<rect width="182" height="136" x="19" y="112" fill="#F4F5F7" rx="17.5"/>
|
|
6
|
+
<path fill="#F4F5F7" d="M18 36h184c4.97 0 9 4.03 9 9v6H9v-6c0-4.97 4.03-9 9-9z"/>
|
|
7
|
+
<path fill="#F4F5F7" d="M9 51H211V82H9z" transform="matrix(1 0 0 -1 0 133)"/>
|
|
8
|
+
<rect width="52" height="5" x="84" y="14" fill="#2E2E2E" rx="2.5"/>
|
|
9
|
+
<rect width="52" height="5" x="84" y="455" fill="#2E2E2E" rx="2.5"/>
|
|
10
|
+
<circle cx="45.5" cy="19.5" r="5.5" fill="#2E2E2E"/>
|
|
11
|
+
<circle cx="65.5" cy="19.5" r="3.5" fill="#2E2E2E"/>
|
|
12
|
+
<text fill="#000" font-family="Roboto-Regular, Roboto" font-size="12" letter-spacing=".175">
|
|
13
|
+
<tspan x="49.5" y="71">Muji India</tspan>
|
|
14
|
+
</text>
|
|
15
|
+
<circle cx="199" cy="63" r="1" fill="#000"/>
|
|
16
|
+
<circle cx="199" cy="70" r="1" fill="#000"/>
|
|
17
|
+
<circle cx="199" cy="66.5" r="1" fill="#000"/>
|
|
18
|
+
<path fill="#000" d="M28 66c0 .279-.226.505-.505.505h-5.556l2.42 2.42c.198.197.198.518 0 .716-.198.198-.52.198-.718 0l-2.934-2.934c-.39-.39-.39-1.024 0-1.414l2.934-2.934c.198-.198.52-.198.718 0 .198.198.198.519 0 .717l-2.42 2.419h5.556c.279 0 .505.226.505.505z"/>
|
|
19
|
+
</g>
|
|
20
|
+
</svg>
|
|
@@ -15,7 +15,6 @@ import './_templatePreview.scss';
|
|
|
15
15
|
import {updateCharCount} from '../../utils/smsCharCountV2';
|
|
16
16
|
import messages from './messages';
|
|
17
17
|
import { WECHAT } from '../../v2Containers/CreativesContainer/constants';
|
|
18
|
-
import Carousel from '../Carousel';
|
|
19
18
|
const wechatBodyNew = require('./assets/images/wechat_mobile_android.svg');
|
|
20
19
|
const smsMobileAndroid = require('./assets/images/sms_mobile_android.svg');
|
|
21
20
|
const lineMobileAndroid = require('../../assets/line.png');
|
|
@@ -24,7 +23,6 @@ const lineStickerPlaceholder = require('../../assets/smiley-placeholder.svg');
|
|
|
24
23
|
const androidPushMessagePhone = require('./assets/images/androidPushMessage.svg');
|
|
25
24
|
const iPhonePushMessagePhone = require('./assets/images/iPhonePushMessage.svg');
|
|
26
25
|
import { CAP_COLOR_03, CAP_WHITE, FONT_COLOR_01, CAP_G08 } from '@capillarytech/cap-ui-library/styled/variables';
|
|
27
|
-
import { TEMPLATE, IMAGE_CAROUSEL, IMAGE, STICKER, TEXT, IMAGE_MAP } from '../../v2Containers/Line/Container/constants';
|
|
28
26
|
|
|
29
27
|
class TemplatePreview extends React.Component { // eslint-disable-line react/prefer-stateless-function
|
|
30
28
|
onPreviewContentClicked = (channel) => {
|
|
@@ -315,7 +313,7 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
315
313
|
<div
|
|
316
314
|
className="msgContainer line-preview"
|
|
317
315
|
style={{
|
|
318
|
-
maxHeight:
|
|
316
|
+
maxHeight: 300,
|
|
319
317
|
overflow: 'scroll',
|
|
320
318
|
flexDirection: 'column',
|
|
321
319
|
marginLeft: 40,
|
|
@@ -345,36 +343,35 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
345
343
|
selectedSticker = {
|
|
346
344
|
stickerUrl: lineStickerPlaceholder,
|
|
347
345
|
},
|
|
348
|
-
imageCarousel = [lineImgPlaceholder],
|
|
349
346
|
} = item || {};
|
|
350
|
-
|
|
351
|
-
background: CAP_WHITE,
|
|
352
|
-
color: FONT_COLOR_01,
|
|
353
|
-
borderRadius: 8,
|
|
354
|
-
position: 'static',
|
|
355
|
-
margin: '6px 0 20px 28px',
|
|
356
|
-
height: 'auto',
|
|
357
|
-
minHeight: 'auto',
|
|
358
|
-
overflow: 'initial',
|
|
359
|
-
maxHeight: 'initial',
|
|
360
|
-
};
|
|
361
|
-
if (type === TEXT) {
|
|
347
|
+
if (type === 'text') {
|
|
362
348
|
return (
|
|
363
349
|
<div
|
|
364
350
|
className="message-pop align-left"
|
|
365
|
-
style={
|
|
351
|
+
style={{
|
|
352
|
+
background: CAP_WHITE,
|
|
353
|
+
color: FONT_COLOR_01,
|
|
354
|
+
borderRadius: 8,
|
|
355
|
+
position: 'static',
|
|
356
|
+
margin: '6px 0 20px 28px',
|
|
357
|
+
height: 'auto'
|
|
358
|
+
}}
|
|
366
359
|
>
|
|
367
360
|
<p style={{ marginBottom: 5 }}>{messageContent || ''}</p>
|
|
368
361
|
</div>
|
|
369
362
|
);
|
|
370
363
|
}
|
|
371
|
-
if ((type ===
|
|
364
|
+
if ((type === 'image' && previewImageUrl)) {
|
|
372
365
|
return (
|
|
373
366
|
<div
|
|
374
367
|
className="message-pop align-left"
|
|
375
368
|
style={{
|
|
376
|
-
|
|
377
|
-
|
|
369
|
+
background: CAP_G08,
|
|
370
|
+
color: FONT_COLOR_01,
|
|
371
|
+
borderRadius: 8,
|
|
372
|
+
position: 'static',
|
|
373
|
+
margin: '6px 0 20px 28px',
|
|
374
|
+
height: 184,
|
|
378
375
|
display: 'flex',
|
|
379
376
|
justifyContent: 'center',
|
|
380
377
|
alignItems: 'center',
|
|
@@ -393,13 +390,17 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
393
390
|
</div>
|
|
394
391
|
);
|
|
395
392
|
}
|
|
396
|
-
if ((type ===
|
|
393
|
+
if ((type === 'imagemap' && baseUrl)) {
|
|
397
394
|
return (
|
|
398
395
|
<div
|
|
399
396
|
className="message-pop align-left"
|
|
400
397
|
style={{
|
|
401
|
-
|
|
402
|
-
|
|
398
|
+
background: CAP_G08,
|
|
399
|
+
color: FONT_COLOR_01,
|
|
400
|
+
borderRadius: 8,
|
|
401
|
+
position: 'static',
|
|
402
|
+
margin: '6px 0 20px 28px',
|
|
403
|
+
height: 184,
|
|
403
404
|
display: 'flex',
|
|
404
405
|
justifyContent: 'center',
|
|
405
406
|
alignItems: 'center',
|
|
@@ -418,13 +419,16 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
418
419
|
</div>
|
|
419
420
|
);
|
|
420
421
|
}
|
|
421
|
-
if (type ===
|
|
422
|
+
if (type === 'sticker' && selectedSticker) {
|
|
422
423
|
return (
|
|
423
424
|
<div
|
|
424
425
|
className="message-pop align-left"
|
|
425
426
|
style={{
|
|
426
|
-
...sectionStyle,
|
|
427
427
|
background: 'transparent',
|
|
428
|
+
color: FONT_COLOR_01,
|
|
429
|
+
color: FONT_COLOR_01,
|
|
430
|
+
position: 'static',
|
|
431
|
+
margin: '6px 0 20px 10px',
|
|
428
432
|
display: 'flex',
|
|
429
433
|
justifyContent: 'center',
|
|
430
434
|
alignItems: 'center',
|
|
@@ -446,17 +450,6 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
|
|
|
446
450
|
</div>
|
|
447
451
|
);
|
|
448
452
|
}
|
|
449
|
-
if ((type === IMAGE_CAROUSEL || type === TEMPLATE) && imageCarousel) {
|
|
450
|
-
return (
|
|
451
|
-
<div
|
|
452
|
-
style={{
|
|
453
|
-
margin: '32px 0',
|
|
454
|
-
}}
|
|
455
|
-
>
|
|
456
|
-
<Carousel imageCarousel={imageCarousel}/>
|
|
457
|
-
</div>
|
|
458
|
-
)
|
|
459
|
-
}
|
|
460
453
|
return null;
|
|
461
454
|
})
|
|
462
455
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
// import React from 'react';
|
|
2
|
-
// import { shallow } from 'enzyme';
|
|
3
|
-
|
|
4
|
-
// import TemplatePreview from '../index';
|
|
5
|
-
|
|
6
|
-
describe('<TemplatePreview />', () => {
|
|
7
|
-
it('Expect to have unit tests specified', () => {
|
|
8
|
-
expect(true).toEqual(false);
|
|
9
|
-
});
|
|
10
|
-
});
|
|
1
|
+
// import React from 'react';
|
|
2
|
+
// import { shallow } from 'enzyme';
|
|
3
|
+
|
|
4
|
+
// import TemplatePreview from '../index';
|
|
5
|
+
|
|
6
|
+
describe('<TemplatePreview />', () => {
|
|
7
|
+
it('Expect to have unit tests specified', () => {
|
|
8
|
+
expect(true).toEqual(false);
|
|
9
|
+
});
|
|
10
|
+
});
|
|
@@ -175,8 +175,7 @@ function SlideBoxContent(props) {
|
|
|
175
175
|
animatedStickerUrl,
|
|
176
176
|
stickerId,
|
|
177
177
|
packageId,
|
|
178
|
-
baseUrl
|
|
179
|
-
template,
|
|
178
|
+
baseUrl
|
|
180
179
|
}) => {
|
|
181
180
|
let previewContent = {};
|
|
182
181
|
previewContent.messageContent = text;
|
|
@@ -188,8 +187,6 @@ function SlideBoxContent(props) {
|
|
|
188
187
|
packageId,
|
|
189
188
|
};
|
|
190
189
|
previewContent.baseUrl = baseUrl;
|
|
191
|
-
previewContent.imageCarousel = get(template, 'columns', [{}]).map(({ imageUrl, action: { label: actionLabel } = {} }) => ({ imageUrl, actionLabel }) );
|
|
192
|
-
|
|
193
190
|
const getType = () => {
|
|
194
191
|
if (text) {
|
|
195
192
|
return 'text';
|
|
@@ -203,9 +200,6 @@ function SlideBoxContent(props) {
|
|
|
203
200
|
if (baseUrl) {
|
|
204
201
|
return 'imagemap';
|
|
205
202
|
}
|
|
206
|
-
if (template) {
|
|
207
|
-
return 'image_carousel';
|
|
208
|
-
}
|
|
209
203
|
};
|
|
210
204
|
previewContent.type = getType();
|
|
211
205
|
return previewContent;
|
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { FormattedMessage } from 'react-intl';
|
|
3
|
-
import { CapButton } from '@capillarytech/cap-ui-library';
|
|
4
|
-
import PropTypes from 'prop-types';
|
|
5
|
-
import messages from './messages';
|
|
6
|
-
function getFullModeSaveBtn(slidBoxContent) {
|
|
7
|
-
return slidBoxContent === "editTemplate" ?
|
|
8
|
-
<FormattedMessage {...messages.creativesTemplatesUpdate}/>
|
|
9
|
-
:
|
|
10
|
-
<FormattedMessage {...messages.creativesTemplatesSaveFullMode}/>;
|
|
11
|
-
}
|
|
12
|
-
function SlideBoxFooter(props) {
|
|
13
|
-
const { slidBoxContent, onSave, onEditTemplate, onCreateNextStep, isFullMode} = props;
|
|
14
|
-
return (
|
|
15
|
-
<div>
|
|
16
|
-
<div>
|
|
17
|
-
{props.shouldShowDoneFooter() && (
|
|
18
|
-
<div>
|
|
19
|
-
<CapButton onClick={onSave}>
|
|
20
|
-
{isFullMode ?
|
|
21
|
-
getFullModeSaveBtn(slidBoxContent)
|
|
22
|
-
:
|
|
23
|
-
<FormattedMessage {...messages.creativesTemplatesSave} />
|
|
24
|
-
}
|
|
25
|
-
</CapButton>
|
|
26
|
-
{/* {isFullMode && <CapButton type="secondary" onClick={onDiscard}><FormattedMessage {...messages.creativesTemplatesDiscard}/></CapButton>} */}
|
|
27
|
-
</div>)}
|
|
28
|
-
{props.shouldShowContinueFooter() &&
|
|
29
|
-
<CapButton onClick={onCreateNextStep}>
|
|
30
|
-
<FormattedMessage {...messages.continue} />
|
|
31
|
-
</CapButton>
|
|
32
|
-
}
|
|
33
|
-
{slidBoxContent === 'preview' && (
|
|
34
|
-
<CapButton onClick={onEditTemplate} type="secondary">
|
|
35
|
-
<FormattedMessage {...messages.creativesTemplatesEdit} />
|
|
36
|
-
</CapButton>
|
|
37
|
-
)}
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
40
|
-
);
|
|
41
|
-
}
|
|
42
|
-
SlideBoxFooter.propTypes = {
|
|
43
|
-
slidBoxContent: PropTypes.node,
|
|
44
|
-
onSave: PropTypes.func,
|
|
45
|
-
onEditTemplate: PropTypes.func,
|
|
46
|
-
onCreateNextStep: PropTypes.func,
|
|
47
|
-
shouldShowContinueFooter: PropTypes.func,
|
|
48
|
-
shouldShowDoneFooter: PropTypes.func,
|
|
49
|
-
isFullMode: PropTypes.bool,
|
|
50
|
-
};
|
|
51
|
-
export default SlideBoxFooter;
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { FormattedMessage } from 'react-intl';
|
|
3
|
+
import { CapButton } from '@capillarytech/cap-ui-library';
|
|
4
|
+
import PropTypes from 'prop-types';
|
|
5
|
+
import messages from './messages';
|
|
6
|
+
function getFullModeSaveBtn(slidBoxContent) {
|
|
7
|
+
return slidBoxContent === "editTemplate" ?
|
|
8
|
+
<FormattedMessage {...messages.creativesTemplatesUpdate}/>
|
|
9
|
+
:
|
|
10
|
+
<FormattedMessage {...messages.creativesTemplatesSaveFullMode}/>;
|
|
11
|
+
}
|
|
12
|
+
function SlideBoxFooter(props) {
|
|
13
|
+
const { slidBoxContent, onSave, onEditTemplate, onCreateNextStep, isFullMode, fetchingCmsData} = props;
|
|
14
|
+
return (
|
|
15
|
+
<div>
|
|
16
|
+
<div>
|
|
17
|
+
{props.shouldShowDoneFooter() && (
|
|
18
|
+
<div>
|
|
19
|
+
<CapButton onClick={onSave} disabled={fetchingCmsData || false}>
|
|
20
|
+
{isFullMode ?
|
|
21
|
+
getFullModeSaveBtn(slidBoxContent)
|
|
22
|
+
:
|
|
23
|
+
<FormattedMessage {...messages.creativesTemplatesSave} />
|
|
24
|
+
}
|
|
25
|
+
</CapButton>
|
|
26
|
+
{/* {isFullMode && <CapButton type="secondary" onClick={onDiscard}><FormattedMessage {...messages.creativesTemplatesDiscard}/></CapButton>} */}
|
|
27
|
+
</div>)}
|
|
28
|
+
{props.shouldShowContinueFooter() &&
|
|
29
|
+
<CapButton onClick={onCreateNextStep}>
|
|
30
|
+
<FormattedMessage {...messages.continue} />
|
|
31
|
+
</CapButton>
|
|
32
|
+
}
|
|
33
|
+
{slidBoxContent === 'preview' && (
|
|
34
|
+
<CapButton onClick={onEditTemplate} type="secondary">
|
|
35
|
+
<FormattedMessage {...messages.creativesTemplatesEdit} />
|
|
36
|
+
</CapButton>
|
|
37
|
+
)}
|
|
38
|
+
</div>
|
|
39
|
+
</div>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
SlideBoxFooter.propTypes = {
|
|
43
|
+
slidBoxContent: PropTypes.node,
|
|
44
|
+
onSave: PropTypes.func,
|
|
45
|
+
onEditTemplate: PropTypes.func,
|
|
46
|
+
onCreateNextStep: PropTypes.func,
|
|
47
|
+
shouldShowContinueFooter: PropTypes.func,
|
|
48
|
+
shouldShowDoneFooter: PropTypes.func,
|
|
49
|
+
isFullMode: PropTypes.bool,
|
|
50
|
+
};
|
|
51
|
+
export default SlideBoxFooter;
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
/*
|
|
2
|
-
*
|
|
3
|
-
* CreativesContainer actions
|
|
4
|
-
*
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
DEFAULT_ACTION,
|
|
9
|
-
HIDE_CONTAINER_LOADER,
|
|
10
|
-
SHOW_CONTANER_LOADER,
|
|
11
|
-
} from './constants';
|
|
12
|
-
|
|
13
|
-
export function defaultAction() {
|
|
14
|
-
return {
|
|
15
|
-
type: DEFAULT_ACTION,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
export function showCreativesContainerLoader() {
|
|
19
|
-
return {
|
|
20
|
-
type: SHOW_CONTANER_LOADER,
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
export function hideCreativesContanerLoader() {
|
|
24
|
-
return {
|
|
25
|
-
type: HIDE_CONTAINER_LOADER,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
1
|
+
/*
|
|
2
|
+
*
|
|
3
|
+
* CreativesContainer actions
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
DEFAULT_ACTION,
|
|
9
|
+
HIDE_CONTAINER_LOADER,
|
|
10
|
+
SHOW_CONTANER_LOADER,
|
|
11
|
+
} from './constants';
|
|
12
|
+
|
|
13
|
+
export function defaultAction() {
|
|
14
|
+
return {
|
|
15
|
+
type: DEFAULT_ACTION,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function showCreativesContainerLoader() {
|
|
19
|
+
return {
|
|
20
|
+
type: SHOW_CONTANER_LOADER,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function hideCreativesContanerLoader() {
|
|
24
|
+
return {
|
|
25
|
+
type: HIDE_CONTAINER_LOADER,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
/*
|
|
2
|
-
*
|
|
3
|
-
* CreativesContainer constants
|
|
4
|
-
*
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
export const DEFAULT_ACTION = 'app/CreativesContainer/DEFAULT_ACTION';
|
|
8
|
-
export const EMAIL = "EMAIL";
|
|
9
|
-
export const SMS = "SMS";
|
|
10
|
-
export const EBILL = "EBILL";
|
|
11
|
-
export const LINE = "LINE";
|
|
12
|
-
export const CALL_TASK = "CALL_TASK";
|
|
13
|
-
export const MOBILE_PUSH = "MOBILEPUSH";
|
|
14
|
-
export const WECHAT = "WECHAT";
|
|
15
|
-
export const FACEBOOK = "FACEBOOK";
|
|
16
|
-
export const SHOW_CONTANER_LOADER = "app/CreativesContainer/SHOW_CONTANER_LOADER";
|
|
17
|
-
export const HIDE_CONTAINER_LOADER = "app/CreativesContainer/HIDE_CONTAINER_LOADER";
|
|
1
|
+
/*
|
|
2
|
+
*
|
|
3
|
+
* CreativesContainer constants
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export const DEFAULT_ACTION = 'app/CreativesContainer/DEFAULT_ACTION';
|
|
8
|
+
export const EMAIL = "EMAIL";
|
|
9
|
+
export const SMS = "SMS";
|
|
10
|
+
export const EBILL = "EBILL";
|
|
11
|
+
export const LINE = "LINE";
|
|
12
|
+
export const CALL_TASK = "CALL_TASK";
|
|
13
|
+
export const MOBILE_PUSH = "MOBILEPUSH";
|
|
14
|
+
export const WECHAT = "WECHAT";
|
|
15
|
+
export const FACEBOOK = "FACEBOOK";
|
|
16
|
+
export const SHOW_CONTANER_LOADER = "app/CreativesContainer/SHOW_CONTANER_LOADER";
|
|
17
|
+
export const HIDE_CONTAINER_LOADER = "app/CreativesContainer/HIDE_CONTAINER_LOADER";
|
|
@@ -25,6 +25,7 @@ import * as globalActions from '../Cap/actions';
|
|
|
25
25
|
import {isLoading as isLoadingSelector} from './selectors';
|
|
26
26
|
import messages from './messages';
|
|
27
27
|
import { MAP_TEMPLATE } from '../WeChat/Wrapper/constants';
|
|
28
|
+
import { makeSelectFetchingCmsData } from '../Email/selectors';
|
|
28
29
|
|
|
29
30
|
const classPrefix = 'add-creatives-section';
|
|
30
31
|
|
|
@@ -165,6 +166,8 @@ class Creatives extends React.Component {
|
|
|
165
166
|
iso_code: templateData.iso_code,
|
|
166
167
|
language: templateData.language,
|
|
167
168
|
drag_drop_id: templateData.drag_drop_id,
|
|
169
|
+
json_content: templateData.json_content,
|
|
170
|
+
id: templateData.id,
|
|
168
171
|
};
|
|
169
172
|
creativesTemplateData = {
|
|
170
173
|
base: formData,
|
|
@@ -528,7 +531,7 @@ class Creatives extends React.Component {
|
|
|
528
531
|
}
|
|
529
532
|
render() {
|
|
530
533
|
const {slidBoxContent, isGetFormData, showSlideBox, templateData, currentChannel, emailCreateMode, templateStep, isLoadingContent, mobilePushCreateMode, isDiscardMessage, weChatTemplateType, weChatMaptemplateStep} = this.state;
|
|
531
|
-
const {isFullMode, creativesMode, cap, isUploading, channelsToHide, selectedWeChatAccount, forwardedTags, channelsToDisable, selectedOfferDetails, onTestContentClicked, onPreviewContentClicked, getCreativesData} = this.props;
|
|
534
|
+
const {isFullMode, creativesMode, cap, isUploading, channelsToHide, selectedWeChatAccount, forwardedTags, channelsToDisable, selectedOfferDetails, onTestContentClicked, onPreviewContentClicked, getCreativesData, fetchingCmsData} = this.props;
|
|
532
535
|
const mapTemplateCreate = slidBoxContent === 'createTemplate' && weChatTemplateType === MAP_TEMPLATE && templateStep !== 'modeSelection';
|
|
533
536
|
/* TODO: Instead of passing down same props separately to each component down, write common function to these props and pass it accordingly */
|
|
534
537
|
return (
|
|
@@ -617,11 +620,12 @@ class Creatives extends React.Component {
|
|
|
617
620
|
emailCreateMode={emailCreateMode}
|
|
618
621
|
shouldShowContinueFooter={this.shouldShowContinueFooter}
|
|
619
622
|
shouldShowDoneFooter={this.shouldShowDoneFooter}
|
|
623
|
+
fetchingCmsData={fetchingCmsData}
|
|
620
624
|
/>
|
|
621
625
|
}
|
|
622
626
|
handleClose={this.handleCloseSlideBox}
|
|
623
627
|
show={showSlideBox}
|
|
624
|
-
size="size-
|
|
628
|
+
size="size-xl"
|
|
625
629
|
/>
|
|
626
630
|
</SlideBoxWrapper>
|
|
627
631
|
);
|
|
@@ -659,6 +663,7 @@ const mapStatesToProps = () => createStructuredSelector({
|
|
|
659
663
|
EmailLayout: selectEmailLayout(),
|
|
660
664
|
isUploading: uploadSelector(),
|
|
661
665
|
Templates: makeSelectTemplates(),
|
|
666
|
+
fetchingCmsData: makeSelectFetchingCmsData(),
|
|
662
667
|
});
|
|
663
668
|
function mapDispatchToProps(dispatch) {
|
|
664
669
|
return {
|
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
@import '~@capillarytech/cap-ui-library/styles/_variables.scss';
|
|
2
|
-
|
|
3
|
-
$classPrefix: add-creatives-section;
|
|
4
|
-
|
|
5
|
-
.#{$classPrefix} {
|
|
6
|
-
&.creatives-library-mode{
|
|
7
|
-
.sms-create-container, .sms-email-container{
|
|
8
|
-
.ant-tabs-top-bar{
|
|
9
|
-
display: none;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
.#{$classPrefix}-footer {
|
|
14
|
-
position: absolute;
|
|
15
|
-
bottom: 0;
|
|
16
|
-
left: 1px;
|
|
17
|
-
padding: 0 12px;
|
|
18
|
-
display: flex;
|
|
19
|
-
align-items: center;
|
|
20
|
-
height: 48px;
|
|
21
|
-
border-top: 1px solid $CAP_G07;
|
|
22
|
-
|
|
23
|
-
&.with-creative {
|
|
24
|
-
width: 100%;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
.wechat-steps {
|
|
28
|
-
width: 40% !important;
|
|
29
|
-
left: 20%;
|
|
30
|
-
position: relative;
|
|
31
|
-
.ant-steps-item-title::after {
|
|
32
|
-
top: 8px;
|
|
33
|
-
}
|
|
34
|
-
.ant-steps-item-content {
|
|
35
|
-
vertical-align: middle;
|
|
36
|
-
padding-top: 4px;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
.map-template-create {
|
|
42
|
-
.slidebox-header div:first-child {
|
|
43
|
-
width: 100%;
|
|
44
|
-
}
|
|
1
|
+
@import '~@capillarytech/cap-ui-library/styles/_variables.scss';
|
|
2
|
+
|
|
3
|
+
$classPrefix: add-creatives-section;
|
|
4
|
+
|
|
5
|
+
.#{$classPrefix} {
|
|
6
|
+
&.creatives-library-mode{
|
|
7
|
+
.sms-create-container, .sms-email-container{
|
|
8
|
+
.ant-tabs-top-bar{
|
|
9
|
+
display: none;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
.#{$classPrefix}-footer {
|
|
14
|
+
position: absolute;
|
|
15
|
+
bottom: 0;
|
|
16
|
+
left: 1px;
|
|
17
|
+
padding: 0 12px;
|
|
18
|
+
display: flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
height: 48px;
|
|
21
|
+
border-top: 1px solid $CAP_G07;
|
|
22
|
+
|
|
23
|
+
&.with-creative {
|
|
24
|
+
width: 100%;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
.wechat-steps {
|
|
28
|
+
width: 40% !important;
|
|
29
|
+
left: 20%;
|
|
30
|
+
position: relative;
|
|
31
|
+
.ant-steps-item-title::after {
|
|
32
|
+
top: 8px;
|
|
33
|
+
}
|
|
34
|
+
.ant-steps-item-content {
|
|
35
|
+
vertical-align: middle;
|
|
36
|
+
padding-top: 4px;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.map-template-create {
|
|
42
|
+
.slidebox-header div:first-child {
|
|
43
|
+
width: 100%;
|
|
44
|
+
}
|
|
45
45
|
}
|