@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.
Files changed (85) hide show
  1. package/assets/line-image-placeholder.svg +14 -0
  2. package/assets/line.png +0 -0
  3. package/assets/smiley-placeholder.svg +11 -0
  4. package/components/TemplatePreview/index.js +185 -8
  5. package/index.js +3 -3
  6. package/package.json +1 -1
  7. package/routes.js +2 -2
  8. package/services/api.js +3 -0
  9. package/styles/vendor/semantic/src/definitions/modules/accordion.less +219 -219
  10. package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +1 -1
  11. package/v2Components/TemplatePreview/assets/images/WECHAT_5x.png +0 -0
  12. package/v2Components/TemplatePreview/index.js +164 -12
  13. package/v2Components/TemplatePreview/messages.js +8 -0
  14. package/v2Containers/CreativesContainer/SlideBoxContent.js +51 -17
  15. package/v2Containers/CreativesContainer/index.js +23 -17
  16. package/v2Containers/Line/Container/Drawer/index.js +93 -0
  17. package/v2Containers/Line/Container/Image/constants.js +3 -0
  18. package/v2Containers/Line/Container/Image/index.js +460 -0
  19. package/v2Containers/Line/Container/Image/messages.js +86 -0
  20. package/v2Containers/Line/Container/Image/style.js +32 -0
  21. package/v2Containers/Line/Container/ImageMap/assets/hover/custom.png +0 -0
  22. package/v2Containers/Line/Container/ImageMap/assets/hover/templateEight.png +0 -0
  23. package/v2Containers/Line/Container/ImageMap/assets/hover/templateFive.png +0 -0
  24. package/v2Containers/Line/Container/ImageMap/assets/hover/templateFour.png +0 -0
  25. package/v2Containers/Line/Container/ImageMap/assets/hover/templateOne.png +0 -0
  26. package/v2Containers/Line/Container/ImageMap/assets/hover/templateSeven.png +0 -0
  27. package/v2Containers/Line/Container/ImageMap/assets/hover/templateSix.png +0 -0
  28. package/v2Containers/Line/Container/ImageMap/assets/hover/templateThree.png +0 -0
  29. package/v2Containers/Line/Container/ImageMap/assets/hover/templateTwo.png +0 -0
  30. package/v2Containers/Line/Container/ImageMap/assets/selected/custom.png +0 -0
  31. package/v2Containers/Line/Container/ImageMap/assets/selected/templateEight.png +0 -0
  32. package/v2Containers/Line/Container/ImageMap/assets/selected/templateFive.png +0 -0
  33. package/v2Containers/Line/Container/ImageMap/assets/selected/templateFour.png +0 -0
  34. package/v2Containers/Line/Container/ImageMap/assets/selected/templateOne.png +0 -0
  35. package/v2Containers/Line/Container/ImageMap/assets/selected/templateSeven.png +0 -0
  36. package/v2Containers/Line/Container/ImageMap/assets/selected/templateSix.png +0 -0
  37. package/v2Containers/Line/Container/ImageMap/assets/selected/templateThree.png +0 -0
  38. package/v2Containers/Line/Container/ImageMap/assets/selected/templateTwo.png +0 -0
  39. package/v2Containers/Line/Container/ImageMap/assets/templates/custom.png +0 -0
  40. package/v2Containers/Line/Container/ImageMap/assets/templates/templateEight.png +0 -0
  41. package/v2Containers/Line/Container/ImageMap/assets/templates/templateFive.png +0 -0
  42. package/v2Containers/Line/Container/ImageMap/assets/templates/templateFour.png +0 -0
  43. package/v2Containers/Line/Container/ImageMap/assets/templates/templateOne.png +0 -0
  44. package/v2Containers/Line/Container/ImageMap/assets/templates/templateSeven.png +0 -0
  45. package/v2Containers/Line/Container/ImageMap/assets/templates/templateSix.png +0 -0
  46. package/v2Containers/Line/Container/ImageMap/assets/templates/templateThree.png +0 -0
  47. package/v2Containers/Line/Container/ImageMap/assets/templates/templateTwo.png +0 -0
  48. package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/custom.png +0 -0
  49. package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateEight.png +0 -0
  50. package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateFive.png +0 -0
  51. package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateFour.png +0 -0
  52. package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateOne.png +0 -0
  53. package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateSeven.png +0 -0
  54. package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateSix.png +0 -0
  55. package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateThree.png +0 -0
  56. package/v2Containers/Line/Container/ImageMap/assets/templates_with_alphabets/templateTwo.png +0 -0
  57. package/v2Containers/Line/Container/ImageMap/constants.js +19 -0
  58. package/v2Containers/Line/Container/ImageMap/index.js +603 -0
  59. package/v2Containers/Line/Container/ImageMap/messages.js +126 -0
  60. package/v2Containers/Line/Container/ImageMap/style.js +94 -0
  61. package/v2Containers/Line/Container/ImageMap/templates.json +195 -0
  62. package/v2Containers/Line/Container/Sticker/index.js +224 -0
  63. package/v2Containers/Line/Container/Sticker/messages.js +34 -0
  64. package/v2Containers/Line/Container/Sticker/style.js +36 -0
  65. package/v2Containers/Line/Container/Sticker/utils.js +68 -0
  66. package/v2Containers/Line/Container/Text/index.js +338 -0
  67. package/v2Containers/Line/Container/Text/messages.js +74 -0
  68. package/v2Containers/Line/Container/Text/style.js +37 -0
  69. package/v2Containers/Line/Container/Wrapper/index.js +152 -0
  70. package/v2Containers/Line/Container/Wrapper/messages.js +46 -0
  71. package/v2Containers/Line/Container/Wrapper/style.js +44 -0
  72. package/v2Containers/Line/Container/Wrapper/utils.js +67 -0
  73. package/v2Containers/Line/Container/_lineCreate.scss +108 -0
  74. package/v2Containers/Line/Container/actions.js +99 -0
  75. package/v2Containers/Line/Container/constants.js +48 -0
  76. package/v2Containers/Line/Container/index.js +581 -0
  77. package/v2Containers/Line/Container/messages.js +66 -0
  78. package/v2Containers/Line/Container/reducer.js +103 -0
  79. package/v2Containers/Line/Container/sagas.js +137 -0
  80. package/v2Containers/Line/Container/selectors.js +30 -0
  81. package/v2Containers/Line/Container/style.js +57 -0
  82. package/v2Containers/Line/Create/index.js +1 -1
  83. package/v2Containers/Templates/index.js +40 -22
  84. package/v2Containers/Templates/messages.js +8 -0
  85. 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
+