@capillarytech/creatives-library 6.7.1 → 6.8.0
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/assets/line-image-placeholder.svg +14 -0
- package/assets/line.png +0 -0
- package/assets/smiley-placeholder.svg +11 -0
- package/components/TemplatePreview/index.js +185 -8
- package/index.js +3 -3
- package/package.json +1 -1
- package/routes.js +2 -2
- package/services/api.js +3 -0
- package/styles/vendor/semantic/src/definitions/modules/accordion.less +219 -219
- package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +1 -1
- package/v2Components/TemplatePreview/assets/images/WECHAT_5x.png +0 -0
- package/v2Components/TemplatePreview/index.js +164 -12
- package/v2Components/TemplatePreview/messages.js +8 -0
- package/v2Containers/CreativesContainer/SlideBoxContent.js +51 -17
- package/v2Containers/CreativesContainer/index.js +23 -17
- package/v2Containers/Line/Container/Drawer/index.js +93 -0
- package/v2Containers/Line/Container/Image/constants.js +3 -0
- package/v2Containers/Line/Container/Image/index.js +460 -0
- package/v2Containers/Line/Container/Image/messages.js +86 -0
- package/v2Containers/Line/Container/Image/style.js +32 -0
- package/v2Containers/Line/Container/ImageMap/assets/hover/custom.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/hover/templateEight.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/hover/templateFive.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/hover/templateFour.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/hover/templateOne.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/hover/templateSeven.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/hover/templateSix.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/hover/templateThree.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/hover/templateTwo.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/selected/custom.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/selected/templateEight.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/selected/templateFive.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/selected/templateFour.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/selected/templateOne.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/selected/templateSeven.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/selected/templateSix.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/selected/templateThree.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/selected/templateTwo.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates/custom.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates/templateEight.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates/templateFive.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates/templateFour.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates/templateOne.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates/templateSeven.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates/templateSix.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates/templateThree.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates/templateTwo.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/custom.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateEight.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateFive.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateFour.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateOne.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateSeven.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateSix.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateThree.png +0 -0
- package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateTwo.png +0 -0
- package/v2Containers/Line/Container/ImageMap/constants.js +19 -0
- package/v2Containers/Line/Container/ImageMap/index.js +603 -0
- package/v2Containers/Line/Container/ImageMap/messages.js +126 -0
- package/v2Containers/Line/Container/ImageMap/style.js +94 -0
- package/v2Containers/Line/Container/ImageMap/templates.json +195 -0
- package/v2Containers/Line/Container/Sticker/index.js +224 -0
- package/v2Containers/Line/Container/Sticker/messages.js +34 -0
- package/v2Containers/Line/Container/Sticker/style.js +36 -0
- package/v2Containers/Line/Container/Sticker/utils.js +68 -0
- package/v2Containers/Line/Container/Text/index.js +338 -0
- package/v2Containers/Line/Container/Text/messages.js +74 -0
- package/v2Containers/Line/Container/Text/style.js +37 -0
- package/v2Containers/Line/Container/Wrapper/index.js +152 -0
- package/v2Containers/Line/Container/Wrapper/messages.js +46 -0
- package/v2Containers/Line/Container/Wrapper/style.js +44 -0
- package/v2Containers/Line/Container/Wrapper/utils.js +67 -0
- package/v2Containers/Line/Container/_lineCreate.scss +108 -0
- package/v2Containers/Line/Container/actions.js +99 -0
- package/v2Containers/Line/Container/constants.js +48 -0
- package/v2Containers/Line/Container/index.js +581 -0
- package/v2Containers/Line/Container/messages.js +66 -0
- package/v2Containers/Line/Container/reducer.js +103 -0
- package/v2Containers/Line/Container/sagas.js +137 -0
- package/v2Containers/Line/Container/selectors.js +30 -0
- package/v2Containers/Line/Container/style.js +57 -0
- package/v2Containers/Line/Create/index.js +1 -1
- package/v2Containers/Templates/index.js +40 -22
- package/v2Containers/Templates/messages.js +8 -0
- package/v2Containers/TemplatesV2/index.js +13 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* LineImage Messages
|
|
3
|
+
*
|
|
4
|
+
* This contains all the text for the LineImage component.
|
|
5
|
+
*/
|
|
6
|
+
import { defineMessages } from 'react-intl';
|
|
7
|
+
const scope = `creatives.containersV2.LineImageMap`;
|
|
8
|
+
|
|
9
|
+
export default defineMessages({
|
|
10
|
+
"textMessageSelectTemplate": {
|
|
11
|
+
id: `${scope}.textMessageSelectTemplate`,
|
|
12
|
+
defaultMessage: 'Select template',
|
|
13
|
+
},
|
|
14
|
+
"textMessageORLabel": {
|
|
15
|
+
id: `${scope}.textMessageORLabel`,
|
|
16
|
+
defaultMessage: 'OR',
|
|
17
|
+
},
|
|
18
|
+
"textMessageTitlePlaceholder": {
|
|
19
|
+
id: `${scope}.textMessageTitlePlaceholder`,
|
|
20
|
+
defaultMessage: 'Enter template name',
|
|
21
|
+
},
|
|
22
|
+
"textMessageTitleLabel": {
|
|
23
|
+
id: `${scope}.textMessageTitleLabel`,
|
|
24
|
+
defaultMessage: 'Template name',
|
|
25
|
+
},
|
|
26
|
+
"emptyTitleErrorMessage": {
|
|
27
|
+
id: `${scope}.emptyTitleErrorMessage`,
|
|
28
|
+
defaultMessage: 'Template title can not be empty',
|
|
29
|
+
},
|
|
30
|
+
"imageDimenstionDescription": {
|
|
31
|
+
id: `${scope}.imageDimenstionDescription`,
|
|
32
|
+
defaultMessage: 'Dimensions: {dimensions} Size: Up to 10MB',
|
|
33
|
+
},
|
|
34
|
+
"imageReUpload": {
|
|
35
|
+
id: `${scope}.imageReUpload`,
|
|
36
|
+
defaultMessage: 'Re upload',
|
|
37
|
+
},
|
|
38
|
+
"uploadGallery": {
|
|
39
|
+
id: `${scope}.uploadGallery`,
|
|
40
|
+
defaultMessage: 'Gallery',
|
|
41
|
+
},
|
|
42
|
+
"uploadComputer": {
|
|
43
|
+
id: `${scope}.uploadComputer`,
|
|
44
|
+
defaultMessage: 'Your computer',
|
|
45
|
+
},
|
|
46
|
+
"or": {
|
|
47
|
+
id: `${scope}.or`,
|
|
48
|
+
defaultMessage: 'OR',
|
|
49
|
+
},
|
|
50
|
+
"dragAndDrop": {
|
|
51
|
+
id: `${scope}.dragAndDrop`,
|
|
52
|
+
defaultMessage: 'Drag and drop image here',
|
|
53
|
+
},
|
|
54
|
+
"lineImageMapIncorrectSize": {
|
|
55
|
+
id: `${scope}.lineImageMapIncorrectSize`,
|
|
56
|
+
defaultMessage: 'Please upload the image with correct type, size and dimension',
|
|
57
|
+
},
|
|
58
|
+
"imageGallery": {
|
|
59
|
+
id: `${scope}.imageGallery`,
|
|
60
|
+
defaultMessage: 'Gallery',
|
|
61
|
+
},
|
|
62
|
+
"uploadImageLabel": {
|
|
63
|
+
id: `${scope}.uploadImageLabel`,
|
|
64
|
+
defaultMessage: 'Upload Image',
|
|
65
|
+
},
|
|
66
|
+
"selectTemplateDesc": {
|
|
67
|
+
id: `${scope}.selectTemplateDesc`,
|
|
68
|
+
defaultMessage: 'Select a template and upload an image to preview your message',
|
|
69
|
+
},
|
|
70
|
+
"linkDescription": {
|
|
71
|
+
id: `${scope}.linkDescription`,
|
|
72
|
+
defaultMessage: 'Add URL link/s to different parts of uploaded image.'
|
|
73
|
+
},
|
|
74
|
+
"linkUrl": {
|
|
75
|
+
id: `${scope}.linkUrl`,
|
|
76
|
+
defaultMessage: 'Link URL'
|
|
77
|
+
},
|
|
78
|
+
"validUrl": {
|
|
79
|
+
id: `${scope}.validUrl`,
|
|
80
|
+
defaultMessage: 'Please enter a valid URL'
|
|
81
|
+
},
|
|
82
|
+
"richMsgHeader": {
|
|
83
|
+
id: `${scope}.richMsgHeader`,
|
|
84
|
+
defaultMessage: 'Rich message'
|
|
85
|
+
},
|
|
86
|
+
"richMsgDesc": {
|
|
87
|
+
id: `${scope}.richMsgDesc`,
|
|
88
|
+
defaultMessage: "Use this to send out interactive content featuring images you've selected."
|
|
89
|
+
},
|
|
90
|
+
"uploadImageDesc": {
|
|
91
|
+
id: `${scope}.uploadImageDesc`,
|
|
92
|
+
defaultMessage: "The relevant image that complements the message context."
|
|
93
|
+
},
|
|
94
|
+
"linkUrl": {
|
|
95
|
+
id: `${scope}.linkUrl`,
|
|
96
|
+
defaultMessage: "Enter URL link"
|
|
97
|
+
},
|
|
98
|
+
"squareAssetDesc": {
|
|
99
|
+
id: `${scope}.squareAssetDesc`,
|
|
100
|
+
defaultMessage: "Supported image sizes are 1040 × 1040 px for square templates."
|
|
101
|
+
},
|
|
102
|
+
"customAssetDesc": {
|
|
103
|
+
id: `${scope}.customAssetDesc`,
|
|
104
|
+
defaultMessage: "Supported image sizes are 1040 × 520–2080 px for custom templates."
|
|
105
|
+
},
|
|
106
|
+
"textMessageAddLabel": {
|
|
107
|
+
id: `${scope}.textMessageAddLabel`,
|
|
108
|
+
defaultMessage: 'How do you want to upload the image map?',
|
|
109
|
+
},
|
|
110
|
+
"textMessageCreateNew": {
|
|
111
|
+
id: `${scope}.textMessageCreateNew`,
|
|
112
|
+
defaultMessage: 'Create new',
|
|
113
|
+
},
|
|
114
|
+
"lineTemplateImageMap": {
|
|
115
|
+
id: `${scope}.lineTemplateImageMap`,
|
|
116
|
+
defaultMessage: 'Line templates - ImageMap',
|
|
117
|
+
},
|
|
118
|
+
"searchImageMaps": {
|
|
119
|
+
id: `${scope}.searchImageMaps`,
|
|
120
|
+
defaultMessage: 'Search ImageMaps',
|
|
121
|
+
},
|
|
122
|
+
"select": {
|
|
123
|
+
id: `${scope}.select`,
|
|
124
|
+
defaultMessage: 'Select',
|
|
125
|
+
},
|
|
126
|
+
});
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { css } from 'styled-components';
|
|
2
|
+
import {
|
|
3
|
+
CAP_SPACE_40,
|
|
4
|
+
CAP_SPACE_28,
|
|
5
|
+
CAP_SPACE_24,
|
|
6
|
+
CAP_SPACE_20,
|
|
7
|
+
CAP_SPACE_12,
|
|
8
|
+
CAP_SPACE_08,
|
|
9
|
+
CAP_SPACE_04,
|
|
10
|
+
CAP_G06,
|
|
11
|
+
CAP_G10,
|
|
12
|
+
FONT_COLOR_02,
|
|
13
|
+
CAP_SPACE_16,
|
|
14
|
+
FONT_SIZE_VS,
|
|
15
|
+
FONT_WEIGHT_REGULAR
|
|
16
|
+
} from '@capillarytech/cap-ui-library/styled/variables';
|
|
17
|
+
|
|
18
|
+
export default css`
|
|
19
|
+
padding: 0 ${CAP_SPACE_16} ${CAP_SPACE_16};
|
|
20
|
+
position: relative;
|
|
21
|
+
|
|
22
|
+
.image-template-title {
|
|
23
|
+
margin-bottom: 10px;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.image-container {
|
|
27
|
+
background-color: ${CAP_G06};
|
|
28
|
+
margin-top: ${CAP_SPACE_20};
|
|
29
|
+
}
|
|
30
|
+
.imagemap-container {
|
|
31
|
+
padding-top: ${CAP_SPACE_24};
|
|
32
|
+
.imagemap-preview-container {
|
|
33
|
+
position: relative;
|
|
34
|
+
width: 122px;
|
|
35
|
+
height: 122px;
|
|
36
|
+
border: 1px ${CAP_G06} dashed;
|
|
37
|
+
border-radius: ${CAP_SPACE_04};
|
|
38
|
+
font-size: ${FONT_SIZE_VS};
|
|
39
|
+
color: ${FONT_COLOR_02};
|
|
40
|
+
.select-template-desc {
|
|
41
|
+
width: 100px;
|
|
42
|
+
height: 33px;
|
|
43
|
+
margin: auto;
|
|
44
|
+
padding-top: ${CAP_SPACE_40};
|
|
45
|
+
}
|
|
46
|
+
.template-preview {
|
|
47
|
+
position: absolute;
|
|
48
|
+
width: 122px;
|
|
49
|
+
height: 122px;
|
|
50
|
+
left: -1px;
|
|
51
|
+
top: -1px;
|
|
52
|
+
z-index: 1;
|
|
53
|
+
}
|
|
54
|
+
.image-preview {
|
|
55
|
+
left: -1px;
|
|
56
|
+
position: absolute;
|
|
57
|
+
top: -1px;
|
|
58
|
+
opacity: 30%;
|
|
59
|
+
width: 122px;
|
|
60
|
+
height: 122px;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
.select-template {
|
|
64
|
+
padding: 0px;
|
|
65
|
+
width: 122px;
|
|
66
|
+
margin-top: ${CAP_SPACE_12};
|
|
67
|
+
}
|
|
68
|
+
.ant-upload-disabled {
|
|
69
|
+
background-color: ${CAP_G10}
|
|
70
|
+
}
|
|
71
|
+
.base-image-preview {
|
|
72
|
+
width: 152px;
|
|
73
|
+
position: relative;
|
|
74
|
+
left: 100px;
|
|
75
|
+
border-radius: ${CAP_SPACE_04};
|
|
76
|
+
}
|
|
77
|
+
.cap-icon-v2-avatar {
|
|
78
|
+
.text-label {
|
|
79
|
+
right: 56%;
|
|
80
|
+
font-weight: ${FONT_WEIGHT_REGULAR};
|
|
81
|
+
}
|
|
82
|
+
svg {
|
|
83
|
+
border-radius: ${CAP_SPACE_28};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
.template-links {
|
|
87
|
+
padding-top: ${CAP_SPACE_08};
|
|
88
|
+
.ant-input-affix-wrapper {
|
|
89
|
+
width: 150%;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
`;
|
|
94
|
+
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
{
|
|
2
|
+
"templateOne" : [
|
|
3
|
+
{
|
|
4
|
+
"label": "A",
|
|
5
|
+
"x": 0,
|
|
6
|
+
"y": 0,
|
|
7
|
+
"width": 1040,
|
|
8
|
+
"height": 1040
|
|
9
|
+
}
|
|
10
|
+
],
|
|
11
|
+
"templateTwo" : [
|
|
12
|
+
{
|
|
13
|
+
"label": "A",
|
|
14
|
+
"x": 0,
|
|
15
|
+
"y": 0,
|
|
16
|
+
"width": 520,
|
|
17
|
+
"height": 1040
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"label": "B",
|
|
21
|
+
"x": 520,
|
|
22
|
+
"y": 0,
|
|
23
|
+
"width": 520,
|
|
24
|
+
"height": 1040
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
"templateThree" : [
|
|
28
|
+
{
|
|
29
|
+
"label": "A",
|
|
30
|
+
"x": 0,
|
|
31
|
+
"y": 0,
|
|
32
|
+
"width": 1040,
|
|
33
|
+
"height": 520
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
"label": "B",
|
|
37
|
+
"x": 0,
|
|
38
|
+
"y": 520,
|
|
39
|
+
"width": 1040,
|
|
40
|
+
"height": 520
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"templateFour" : [
|
|
44
|
+
{
|
|
45
|
+
"label": "A",
|
|
46
|
+
"x": 0,
|
|
47
|
+
"y": 0,
|
|
48
|
+
"width": 520,
|
|
49
|
+
"height": 346
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"label": "B",
|
|
53
|
+
"x": 0,
|
|
54
|
+
"y": 346,
|
|
55
|
+
"width": 520,
|
|
56
|
+
"height": 346
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"label": "C",
|
|
60
|
+
"x": 0,
|
|
61
|
+
"y": 692,
|
|
62
|
+
"width": 520,
|
|
63
|
+
"height": 346
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"templateFive" : [
|
|
67
|
+
{
|
|
68
|
+
"label": "A",
|
|
69
|
+
"x": 0,
|
|
70
|
+
"y": 0,
|
|
71
|
+
"width": 520,
|
|
72
|
+
"height": 520
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"label": "B",
|
|
76
|
+
"x": 520,
|
|
77
|
+
"y": 0,
|
|
78
|
+
"width": 520,
|
|
79
|
+
"height": 520
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"label": "C",
|
|
83
|
+
"x": 0,
|
|
84
|
+
"y": 520,
|
|
85
|
+
"width": 520,
|
|
86
|
+
"height": 520
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"label": "D",
|
|
90
|
+
"x": 520,
|
|
91
|
+
"y": 520,
|
|
92
|
+
"width": 520,
|
|
93
|
+
"height": 520
|
|
94
|
+
}
|
|
95
|
+
],
|
|
96
|
+
"templateSix" : [
|
|
97
|
+
{
|
|
98
|
+
"label": "A",
|
|
99
|
+
"x": 0,
|
|
100
|
+
"y": 0,
|
|
101
|
+
"width": 1040,
|
|
102
|
+
"height": 520
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"label": "B",
|
|
106
|
+
"x": 0,
|
|
107
|
+
"y": 520,
|
|
108
|
+
"width": 520,
|
|
109
|
+
"height": 520
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"label": "C",
|
|
113
|
+
"x": 520,
|
|
114
|
+
"y": 520,
|
|
115
|
+
"width": 520,
|
|
116
|
+
"height": 520
|
|
117
|
+
}
|
|
118
|
+
],
|
|
119
|
+
"templateSeven" : [
|
|
120
|
+
{
|
|
121
|
+
"label": "A",
|
|
122
|
+
"x": 0,
|
|
123
|
+
"y": 0,
|
|
124
|
+
"width": 520,
|
|
125
|
+
"height": 520
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"label": "B",
|
|
129
|
+
"x": 0,
|
|
130
|
+
"y": 520,
|
|
131
|
+
"width": 520,
|
|
132
|
+
"height": 260
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
"label": "C",
|
|
136
|
+
"x": 0,
|
|
137
|
+
"y": 580,
|
|
138
|
+
"width": 520,
|
|
139
|
+
"height": 260
|
|
140
|
+
}
|
|
141
|
+
],
|
|
142
|
+
"templateEight" : [
|
|
143
|
+
{
|
|
144
|
+
"label": "A",
|
|
145
|
+
"x": 0,
|
|
146
|
+
"y": 0,
|
|
147
|
+
"width": 346,
|
|
148
|
+
"height": 520
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"label": "B",
|
|
152
|
+
"x": 346,
|
|
153
|
+
"y": 0,
|
|
154
|
+
"width": 346,
|
|
155
|
+
"height": 520
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"label": "C",
|
|
159
|
+
"x": 692,
|
|
160
|
+
"y": 0,
|
|
161
|
+
"width": 346,
|
|
162
|
+
"height": 520
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"label": "D",
|
|
166
|
+
"x": 0,
|
|
167
|
+
"y": 520,
|
|
168
|
+
"width": 346,
|
|
169
|
+
"height": 520
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"label": "E",
|
|
173
|
+
"x": 346,
|
|
174
|
+
"y": 520,
|
|
175
|
+
"width": 346,
|
|
176
|
+
"height": 520
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"label": "F",
|
|
180
|
+
"x": 692,
|
|
181
|
+
"y": 520,
|
|
182
|
+
"width": 346,
|
|
183
|
+
"height": 520
|
|
184
|
+
}
|
|
185
|
+
],
|
|
186
|
+
"custom" : [
|
|
187
|
+
{
|
|
188
|
+
"label": "A",
|
|
189
|
+
"x": 0,
|
|
190
|
+
"y": 0,
|
|
191
|
+
"width": 346,
|
|
192
|
+
"height": 520
|
|
193
|
+
}
|
|
194
|
+
]
|
|
195
|
+
}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import { injectIntl, FormattedMessage } from 'react-intl';
|
|
3
|
+
import get from 'lodash/get';
|
|
4
|
+
import CapButton from '@capillarytech/cap-ui-library/CapButton';
|
|
5
|
+
import CapDrawer from '@capillarytech/cap-ui-library/CapDrawer';
|
|
6
|
+
import CapInput from '@capillarytech/cap-ui-library/CapInput';
|
|
7
|
+
import CapHeading from '@capillarytech/cap-ui-library/CapHeading';
|
|
8
|
+
import CapImage from '@capillarytech/cap-ui-library/CapImage';
|
|
9
|
+
import CapTab from '@capillarytech/cap-ui-library/CapTab';
|
|
10
|
+
import CapIcon from '@capillarytech/cap-ui-library/CapIcon';
|
|
11
|
+
import { FONT_COLOR_05 } from '@capillarytech/cap-ui-library/styled/variables';
|
|
12
|
+
|
|
13
|
+
import style from './style';
|
|
14
|
+
import withStyles from '../../../../hoc/withStyles';
|
|
15
|
+
import messages from './messages';
|
|
16
|
+
|
|
17
|
+
import { getTabPanes } from './utils';
|
|
18
|
+
|
|
19
|
+
export const LineSticker = ({
|
|
20
|
+
actions,
|
|
21
|
+
Line,
|
|
22
|
+
className,
|
|
23
|
+
id,
|
|
24
|
+
intl: { formatMessage },
|
|
25
|
+
inheritedTitleStyle,
|
|
26
|
+
isFullMode,
|
|
27
|
+
updateMessageState,
|
|
28
|
+
index,
|
|
29
|
+
activeKey,
|
|
30
|
+
content,
|
|
31
|
+
}) => {
|
|
32
|
+
if (activeKey !== 'sticker') {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const [lineStickers, updateStickerList] = useState([]);
|
|
37
|
+
const [messageTitle, updateTextMessageTitle] = useState('');
|
|
38
|
+
const [errorMessageTitle, updateErrorMessageTitle] = useState(false);
|
|
39
|
+
const [isStickerDrawerOpen, toggleStickerDrawer] = useState(false);
|
|
40
|
+
const [selectedSticker, updateSelectedStickerDetails] = useState();
|
|
41
|
+
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
actions.getLineStickers();
|
|
44
|
+
}, []);
|
|
45
|
+
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
const { messageTitle = '', selectedSticker = {}, type } = content;
|
|
48
|
+
if (selectedSticker.stickerUrl && type === 'sticker') {
|
|
49
|
+
updateTextMessageTitle(messageTitle);
|
|
50
|
+
updateSelectedStickerDetails(selectedSticker);
|
|
51
|
+
}
|
|
52
|
+
}, [content]);
|
|
53
|
+
|
|
54
|
+
useEffect(() => {
|
|
55
|
+
updateStickerList(get(Line, 'lineStickers.response.metaEntities', []));
|
|
56
|
+
}, [Line]);
|
|
57
|
+
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
if (selectedSticker && (isFullMode ? messageTitle : true)) {
|
|
60
|
+
updateMessageState({
|
|
61
|
+
isError: !selectedSticker || !(isFullMode ? messageTitle : true) || errorMessageTitle,
|
|
62
|
+
selectedSticker,
|
|
63
|
+
messageTitle,
|
|
64
|
+
index,
|
|
65
|
+
type: 'sticker',
|
|
66
|
+
messageType: 'selectedSticker',
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}, [errorMessageTitle, selectedSticker, messageTitle]);
|
|
70
|
+
|
|
71
|
+
const updateTextTitleError = (value) => {
|
|
72
|
+
let errorMessage = false;
|
|
73
|
+
if (value === '') {
|
|
74
|
+
errorMessage = formatMessage(messages.emptyTitleErrorMessage);
|
|
75
|
+
updateMessageState({
|
|
76
|
+
isError: true,
|
|
77
|
+
selectedSticker,
|
|
78
|
+
messageTitle: '',
|
|
79
|
+
index,
|
|
80
|
+
type: 'sticker',
|
|
81
|
+
messageType: 'selectedSticker',
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
updateErrorMessageTitle(errorMessage);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const onTextTitleChange = ({ target: { value } }) => {
|
|
88
|
+
updateTextMessageTitle(value);
|
|
89
|
+
updateTextTitleError(value);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const removeSelectedSticker = () => {
|
|
93
|
+
updateSelectedStickerDetails();
|
|
94
|
+
updateMessageState({
|
|
95
|
+
isError: true,
|
|
96
|
+
selectedSticker: undefined,
|
|
97
|
+
messageTitle,
|
|
98
|
+
index,
|
|
99
|
+
type: 'sticker',
|
|
100
|
+
messageType: 'selectedSticker',
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const getLineStickerSection = () => {
|
|
105
|
+
if (selectedSticker) {
|
|
106
|
+
return (
|
|
107
|
+
<>
|
|
108
|
+
<CapImage
|
|
109
|
+
src={selectedSticker.stickerUrl}
|
|
110
|
+
rest={{
|
|
111
|
+
height: 70,
|
|
112
|
+
onMouseOut: e => (e.currentTarget.src = selectedSticker.stickerUrl),
|
|
113
|
+
onMouseOver: e => (e.currentTarget.src = selectedSticker.animatedStickerUrl || selectedSticker.stickerUrl),
|
|
114
|
+
}}
|
|
115
|
+
/>
|
|
116
|
+
<CapButton
|
|
117
|
+
type="flat"
|
|
118
|
+
style={{ padding: 0, top: -34, right: 8 }}
|
|
119
|
+
onClick={removeSelectedSticker}
|
|
120
|
+
>
|
|
121
|
+
<CapIcon type="close-circle" size="s" theme="filled" />
|
|
122
|
+
</CapButton>
|
|
123
|
+
</>
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
return (
|
|
127
|
+
<CapButton
|
|
128
|
+
onClick={() => toggleStickerDrawer(true)}
|
|
129
|
+
type="secondary"
|
|
130
|
+
>
|
|
131
|
+
<FormattedMessage {...messages.selectStickersLabels} />
|
|
132
|
+
</CapButton>
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const onStickerSelect = (definition) => {
|
|
137
|
+
updateSelectedStickerDetails(definition);
|
|
138
|
+
updateMessageState({
|
|
139
|
+
isError: !definition || !(isFullMode ? messageTitle : true) || errorMessageTitle,
|
|
140
|
+
selectedSticker: definition,
|
|
141
|
+
messageTitle,
|
|
142
|
+
index,
|
|
143
|
+
type: 'sticker',
|
|
144
|
+
messageType: 'selectedSticker',
|
|
145
|
+
});
|
|
146
|
+
toggleStickerDrawer(false);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const getStickerSection = () => {
|
|
150
|
+
return (
|
|
151
|
+
<CapTab
|
|
152
|
+
panes={getTabPanes({ lineStickers, onStickerSelect })}
|
|
153
|
+
/>
|
|
154
|
+
)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const getStickerDrawerContent = () => {
|
|
158
|
+
return (
|
|
159
|
+
<>
|
|
160
|
+
<CapHeading type="h3">
|
|
161
|
+
{formatMessage(messages.stickerDrawerTitle)}
|
|
162
|
+
</CapHeading>
|
|
163
|
+
{getStickerSection()}
|
|
164
|
+
</>
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return (
|
|
169
|
+
<div className={className}>
|
|
170
|
+
{
|
|
171
|
+
isFullMode
|
|
172
|
+
? (
|
|
173
|
+
<CapInput
|
|
174
|
+
id={`${id}_input`}
|
|
175
|
+
onChange={onTextTitleChange}
|
|
176
|
+
errorMessage={errorMessageTitle}
|
|
177
|
+
className="sticker-template-title"
|
|
178
|
+
style={inheritedTitleStyle || {}}
|
|
179
|
+
placeholder={formatMessage(messages.textMessageTitlePlaceholder)}
|
|
180
|
+
defaultValue={messageTitle || ''}
|
|
181
|
+
value={messageTitle || ''}
|
|
182
|
+
size="default"
|
|
183
|
+
label={formatMessage(messages.textMessageTitleLabel)}
|
|
184
|
+
/>
|
|
185
|
+
)
|
|
186
|
+
: null
|
|
187
|
+
}
|
|
188
|
+
<CapHeading type="h3" className="sticker-label">
|
|
189
|
+
<FormattedMessage {...messages.stickerDrawerTitle} />
|
|
190
|
+
{
|
|
191
|
+
selectedSticker
|
|
192
|
+
? (
|
|
193
|
+
<CapButton
|
|
194
|
+
onClick={removeSelectedSticker}
|
|
195
|
+
type="flat"
|
|
196
|
+
style={{
|
|
197
|
+
padding: 0,
|
|
198
|
+
marginLeft: 400,
|
|
199
|
+
color: FONT_COLOR_05,
|
|
200
|
+
height: 'auto',
|
|
201
|
+
}}
|
|
202
|
+
>
|
|
203
|
+
<FormattedMessage {...messages.changeStickerButtonLabel} />
|
|
204
|
+
</CapButton>
|
|
205
|
+
)
|
|
206
|
+
: null
|
|
207
|
+
}
|
|
208
|
+
</CapHeading>
|
|
209
|
+
<div className="sticker-content">
|
|
210
|
+
{
|
|
211
|
+
getLineStickerSection()
|
|
212
|
+
}
|
|
213
|
+
</div>
|
|
214
|
+
<CapDrawer
|
|
215
|
+
content={getStickerDrawerContent()}
|
|
216
|
+
visible={isStickerDrawerOpen}
|
|
217
|
+
width={430}
|
|
218
|
+
onClose={() => toggleStickerDrawer(false)}
|
|
219
|
+
/>
|
|
220
|
+
</div>
|
|
221
|
+
)
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
export default injectIntl(withStyles(LineSticker, style));
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* LineSticker Messages
|
|
3
|
+
*
|
|
4
|
+
* This contains all the text for the LineSticker component.
|
|
5
|
+
*/
|
|
6
|
+
import { defineMessages } from 'react-intl';
|
|
7
|
+
const scope = `creatives.containersV2.LineSticker`;
|
|
8
|
+
|
|
9
|
+
export default defineMessages({
|
|
10
|
+
"emptyTitleErrorMessage": {
|
|
11
|
+
id: `${scope}.emptyTitleErrorMessage`,
|
|
12
|
+
defaultMessage: 'Template title can not be empty',
|
|
13
|
+
},
|
|
14
|
+
"textMessageTitlePlaceholder": {
|
|
15
|
+
id: `${scope}.textMessageTitlePlaceholder`,
|
|
16
|
+
defaultMessage: 'Enter template name',
|
|
17
|
+
},
|
|
18
|
+
"textMessageTitleLabel": {
|
|
19
|
+
id: `${scope}.textMessageTitleLabel`,
|
|
20
|
+
defaultMessage: 'Template name',
|
|
21
|
+
},
|
|
22
|
+
"selectStickersLabels": {
|
|
23
|
+
id: `${scope}.selectStickersLabels`,
|
|
24
|
+
defaultMessage: 'Select stickers',
|
|
25
|
+
},
|
|
26
|
+
"stickerDrawerTitle": {
|
|
27
|
+
id: `${scope}.stickerDrawerTitle`,
|
|
28
|
+
defaultMessage: 'Sticker',
|
|
29
|
+
},
|
|
30
|
+
"changeStickerButtonLabel": {
|
|
31
|
+
id: `${scope}.changeStickerButtonLabel`,
|
|
32
|
+
defaultMessage: 'Change sticker',
|
|
33
|
+
},
|
|
34
|
+
});
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { css } from 'styled-components';
|
|
2
|
+
import {
|
|
3
|
+
CAP_SPACE_44,
|
|
4
|
+
CAP_SPACE_28,
|
|
5
|
+
CAP_SPACE_20,
|
|
6
|
+
CAP_SPACE_12,
|
|
7
|
+
CAP_SPACE_08,
|
|
8
|
+
CAP_G07,
|
|
9
|
+
CAP_G12,
|
|
10
|
+
CAP_G06,
|
|
11
|
+
FONT_COLOR_05,
|
|
12
|
+
CAP_SPACE_16,
|
|
13
|
+
CAP_SECONDARY,
|
|
14
|
+
} from '@capillarytech/cap-ui-library/styled/variables';
|
|
15
|
+
|
|
16
|
+
export default css`
|
|
17
|
+
padding: 0 ${CAP_SPACE_16} ${CAP_SPACE_16};
|
|
18
|
+
|
|
19
|
+
.cap-image-v2 {
|
|
20
|
+
max-height: 70px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.sticker-label {
|
|
24
|
+
margin-top: 10px;
|
|
25
|
+
margin-bottom: 4px;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.sticker-content {
|
|
29
|
+
border: 1px solid ${CAP_G06};
|
|
30
|
+
min-height: 180px;
|
|
31
|
+
display: flex;
|
|
32
|
+
justify-content: center;
|
|
33
|
+
align-items: center;
|
|
34
|
+
}
|
|
35
|
+
`;
|
|
36
|
+
|