@capillarytech/creatives-library 6.11.2 → 6.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/package.json +1 -1
  2. package/translations/en.json +14 -15
  3. package/translations/zh.json +14 -15
  4. package/v2Components/BeeEditor/index.js +263 -0
  5. package/v2Components/BeeEditor/index.scss +11 -0
  6. package/v2Components/BeeEditor/messages.js +71 -0
  7. package/v2Components/BeeEditor/tests/index.test.js +10 -0
  8. package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/_wechatRichmediaTemplatePrev.scss +151 -151
  9. package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/messages.js +33 -33
  10. package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/tests/index.test.js +10 -10
  11. package/v2Components/TemplatePreview/assets/images/androidPushMessage.svg +44 -44
  12. package/v2Components/TemplatePreview/assets/images/home-screen-android.svg +21 -21
  13. package/v2Components/TemplatePreview/assets/images/home-screen-ios.svg +16 -16
  14. package/v2Components/TemplatePreview/assets/images/iPhonePushMessage.svg +134 -134
  15. package/v2Components/TemplatePreview/assets/images/mobile.svg +23 -23
  16. package/v2Components/TemplatePreview/assets/images/sms_mobile_android.svg +22 -22
  17. package/v2Components/TemplatePreview/assets/images/user-icon.svg +18 -18
  18. package/v2Components/TemplatePreview/assets/images/wechat-home-screen-android.svg +21 -21
  19. package/v2Components/TemplatePreview/assets/images/wechat-mobile.svg +77 -77
  20. package/v2Components/TemplatePreview/assets/images/wechat_mobile_android.svg +20 -20
  21. package/v2Components/TemplatePreview/tests/index.test.js +10 -10
  22. package/v2Containers/CreativesContainer/actions.js +27 -27
  23. package/v2Containers/CreativesContainer/constants.js +17 -17
  24. package/v2Containers/CreativesContainer/index.scss +44 -44
  25. package/v2Containers/CreativesContainer/messages.js +305 -305
  26. package/v2Containers/CreativesContainer/reducer.js +29 -29
  27. package/v2Containers/CreativesContainer/sagas.js +11 -11
  28. package/v2Containers/CreativesContainer/selectors.js +30 -30
  29. package/v2Containers/CreativesContainer/tests/actions.test.js +18 -18
  30. package/v2Containers/CreativesContainer/tests/index.test.js +10 -10
  31. package/v2Containers/CreativesContainer/tests/reducer.test.js +9 -9
  32. package/v2Containers/CreativesContainer/tests/sagas.test.js +15 -15
  33. package/v2Containers/CreativesContainer/tests/selectors.test.js +10 -10
  34. package/v2Containers/Line/Container/ImageCarousel/constants.js +1 -1
  35. package/v2Containers/Templates/tests/actions.test.js +18 -18
  36. package/v2Containers/Templates/tests/index.test.js +10 -10
  37. package/v2Containers/Templates/tests/reducer.test.js +9 -9
  38. package/v2Containers/Templates/tests/sagas.test.js +15 -15
  39. package/v2Containers/Templates/tests/selectors.test.js +10 -10
  40. package/v2Containers/TemplatesV2/TemplatesV2.style.js +29 -29
  41. package/v2Containers/TemplatesV2/actions.js +16 -16
  42. package/v2Containers/TemplatesV2/constants.js +10 -10
  43. package/v2Containers/TemplatesV2/messages.js +61 -61
  44. package/v2Containers/TemplatesV2/selectors.js +25 -25
  45. package/v2Containers/TemplatesV2/tests/actions.test.js +18 -18
  46. package/v2Containers/TemplatesV2/tests/index.test.js +10 -10
  47. package/v2Containers/TemplatesV2/tests/reducer.test.js +9 -9
  48. package/v2Containers/TemplatesV2/tests/sagas.test.js +15 -15
  49. package/v2Containers/TemplatesV2/tests/selectors.test.js +10 -10
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capillarytech/creatives-library",
3
3
  "author": "meharaj",
4
- "version": "6.11.2",
4
+ "version": "6.11.3",
5
5
  "description": "Capillary creatives ui",
6
6
  "main": "./index.js",
7
7
  "module": "./index.es.js",
@@ -86,21 +86,6 @@
86
86
  "creatives.components.WechatRichmediaTemplatePreview.header": "This is the WechatRichmediaTemplatePreview component !",
87
87
  "creatives.components.WechatRichmediaTemplatePreview.reply": "Reply",
88
88
  "creatives.components.WechatRichmediaTemplatePreview.select": "Select",
89
- "creatives.componentsV2.BeeEditor.addLabel": "Add label",
90
- "creatives.componentsV2.BeeEditor.cancel": "Cancel",
91
- "creatives.componentsV2.BeeEditor.cta": "CTA",
92
- "creatives.componentsV2.BeeEditor.customRows": "Custom rows",
93
- "creatives.componentsV2.BeeEditor.footer": "Footer",
94
- "creatives.componentsV2.BeeEditor.header": "Header",
95
- "creatives.componentsV2.BeeEditor.others": "Others",
96
- "creatives.componentsV2.BeeEditor.rowName": "Row name",
97
- "creatives.componentsV2.BeeEditor.rowPlaceHolder": "Enter Row name",
98
- "creatives.componentsV2.BeeEditor.save": "Save",
99
- "creatives.componentsV2.BeeEditor.select": "Select",
100
- "creatives.componentsV2.BeeEditor.selectCategoyPlaceholder": "Select category",
101
- "creatives.componentsV2.BeeEditor.socialPlatform": "Social platform",
102
- "creatives.componentsV2.BeeEditor.tagPlaceHolder": "Enter tags",
103
- "creatives.componentsV2.BeeEditor.tags": "Tags (optional)",
104
89
  "creatives.componentsV2.BreadCrumbs.header": "This is the BreadCrumbs component !",
105
90
  "creatives.componentsV2.CallTaskPreview.header": "This is the CallTaskPreview component !",
106
91
  "creatives.componentsV2.CapTagList.Cancel": "Cancel",
@@ -793,6 +778,20 @@
793
778
  "creatives.containersV2.Assets.Gallery.uploadedAt": "Uploaded at",
794
779
  "creatives.containersV2.Assets.Gallery.uploadedBy": "Uploaded by",
795
780
  "creatives.containersV2.Assets.Gallery.uploadedOn": "Uploaded on",
781
+ "creatives.containersV2.BeeEditor.addLabel": "Add label",
782
+ "creatives.containersV2.BeeEditor.cta": "CTA",
783
+ "creatives.containersV2.BeeEditor.customRows": "Create new row",
784
+ "creatives.containersV2.BeeEditor.done": "Done",
785
+ "creatives.containersV2.BeeEditor.footer": "Footer",
786
+ "creatives.containersV2.BeeEditor.header": "Header",
787
+ "creatives.containersV2.BeeEditor.others": "Others",
788
+ "creatives.containersV2.BeeEditor.rowCreationFailureMgs": "Error in row creation",
789
+ "creatives.containersV2.BeeEditor.rowCreationSuccessMgs": "Row created successfully",
790
+ "creatives.containersV2.BeeEditor.rowName": "Row name",
791
+ "creatives.containersV2.BeeEditor.rowPlaceHolder": "Enter Row name",
792
+ "creatives.containersV2.BeeEditor.select": "Select",
793
+ "creatives.containersV2.BeeEditor.selectCategoyPlaceholder": "Select category",
794
+ "creatives.containersV2.BeeEditor.socialPlatform": "Social platform",
796
795
  "creatives.containersV2.CallTask.addNewCallTask": "Add new call task",
797
796
  "creatives.containersV2.CallTask.callTaskInfo": "Call Tasks are message sent to store staff. The messages are displayed on the Point of Sale (POS) machines for store staff to take action.",
798
797
  "creatives.containersV2.CallTask.callTaskTitleIllustartion": "Create a Call Task {templateText}",
@@ -86,21 +86,6 @@
86
86
  "creatives.components.WechatRichmediaTemplatePreview.header": "",
87
87
  "creatives.components.WechatRichmediaTemplatePreview.reply": "",
88
88
  "creatives.components.WechatRichmediaTemplatePreview.select": "",
89
- "creatives.componentsV2.BeeEditor.addLabel": "",
90
- "creatives.componentsV2.BeeEditor.cancel": "",
91
- "creatives.componentsV2.BeeEditor.cta": "",
92
- "creatives.componentsV2.BeeEditor.customRows": "",
93
- "creatives.componentsV2.BeeEditor.footer": "",
94
- "creatives.componentsV2.BeeEditor.header": "",
95
- "creatives.componentsV2.BeeEditor.others": "",
96
- "creatives.componentsV2.BeeEditor.rowName": "",
97
- "creatives.componentsV2.BeeEditor.rowPlaceHolder": "",
98
- "creatives.componentsV2.BeeEditor.save": "",
99
- "creatives.componentsV2.BeeEditor.select": "",
100
- "creatives.componentsV2.BeeEditor.selectCategoyPlaceholder": "",
101
- "creatives.componentsV2.BeeEditor.socialPlatform": "",
102
- "creatives.componentsV2.BeeEditor.tagPlaceHolder": "",
103
- "creatives.componentsV2.BeeEditor.tags": "",
104
89
  "creatives.componentsV2.BreadCrumbs.header": "",
105
90
  "creatives.componentsV2.CallTaskPreview.header": "",
106
91
  "creatives.componentsV2.CapTagList.Cancel": "",
@@ -793,6 +778,20 @@
793
778
  "creatives.containersV2.Assets.Gallery.uploadedAt": "",
794
779
  "creatives.containersV2.Assets.Gallery.uploadedBy": "",
795
780
  "creatives.containersV2.Assets.Gallery.uploadedOn": "",
781
+ "creatives.containersV2.BeeEditor.addLabel": "",
782
+ "creatives.containersV2.BeeEditor.cta": "",
783
+ "creatives.containersV2.BeeEditor.customRows": "",
784
+ "creatives.containersV2.BeeEditor.done": "",
785
+ "creatives.containersV2.BeeEditor.footer": "",
786
+ "creatives.containersV2.BeeEditor.header": "",
787
+ "creatives.containersV2.BeeEditor.others": "",
788
+ "creatives.containersV2.BeeEditor.rowCreationFailureMgs": "",
789
+ "creatives.containersV2.BeeEditor.rowCreationSuccessMgs": "",
790
+ "creatives.containersV2.BeeEditor.rowName": "",
791
+ "creatives.containersV2.BeeEditor.rowPlaceHolder": "",
792
+ "creatives.containersV2.BeeEditor.select": "",
793
+ "creatives.containersV2.BeeEditor.selectCategoyPlaceholder": "",
794
+ "creatives.containersV2.BeeEditor.socialPlatform": "",
796
795
  "creatives.containersV2.CallTask.addNewCallTask": "",
797
796
  "creatives.containersV2.CallTask.callTaskInfo": "",
798
797
  "creatives.containersV2.CallTask.callTaskTitleIllustartion": "",
@@ -0,0 +1,263 @@
1
+ /**
2
+ *
3
+ * Beeeditor
4
+ *
5
+ */
6
+ import React, { useEffect, useState, useRef, useCallback } from 'react';
7
+ import PropTypes from 'prop-types';
8
+ import { injectIntl, intlShape, FormattedMessage } from 'react-intl';
9
+ import TagList from '../../v2Containers/TagList';
10
+ import
11
+ {
12
+ CapModal,
13
+ CapButton,
14
+ CapInput,
15
+ CapSelect,
16
+ }
17
+ from '@capillarytech/cap-ui-library';
18
+ import messages from './messages';
19
+ import './index.scss';
20
+
21
+ function BeeEditor(props) {
22
+ const {
23
+ uid,
24
+ beeJson,
25
+ tokenData,
26
+ id,
27
+ location = {},
28
+ moduleFilterEnabled,
29
+ label,
30
+ className,
31
+ userLocale,
32
+ selectedOfferDetails,
33
+ tags,
34
+ injectedTags,
35
+ saveBeeInstance,
36
+ saveBeeData,
37
+ intl,
38
+ onContextChange,
39
+ } = props;
40
+ const {formatMessage} = intl;
41
+ const UNSUBSCRIBE = 'unsubscribe';
42
+ let beePluginInstance = null;
43
+ const categoryOptions = [{key: 'cta', value: 'cta', label: formatMessage(messages.cta)},
44
+ {key: 'footer', value: 'footer', label: formatMessage(messages.footer)},
45
+ {key: 'header', value: 'header', label: formatMessage(messages.header)},
46
+ {key: 'sp', value: 'sp', label: formatMessage(messages.socialPlatform)},
47
+ {key: 'others', value: 'others', label: formatMessage(messages.others)},
48
+ ];
49
+ const [visibleTaglist, setVisibleTaglist] = useState(false);
50
+ const [showRowMetaModal, setRowMetaModal] = useState(false);
51
+ const [selectedTag, setSelectedTag] = useState({});
52
+ const [rowMetaInfo, setRowMetaInfo] = useState({});
53
+ const [rowName, setRowName] = useState('');
54
+ const [rowCategory, setRowCategory] = useState('');
55
+
56
+ const savedCallback = useRef();
57
+ const filteredTags = (tags || []).filter((obj) => obj.definition.value !== UNSUBSCRIBE);
58
+ let intervalTimer;
59
+
60
+ useEffect(() => {
61
+ savedCallback.current = Object.keys(selectedTag).length > 0 ? selectedTag : rowMetaInfo;
62
+ }, [selectedTag, rowMetaInfo]);
63
+
64
+ useEffect(() => {
65
+ const beeConfig = {
66
+ uid,
67
+ container: 'bee-plugin-container',
68
+ rowsConfiguration: {
69
+ emptyRows: true,
70
+ defaultRows: true,
71
+ },
72
+ contentDialog: {
73
+ specialLinks: {
74
+ label: UNSUBSCRIBE,
75
+ handler(resolve) {
76
+ resolve({
77
+ type: 'custom',
78
+ label: UNSUBSCRIBE,
79
+ link: `{{${UNSUBSCRIBE}}}`,
80
+ });
81
+ },
82
+ },
83
+ mergeTags: {
84
+ label: formatMessage(messages.addLabel),
85
+ handler: async (resolve, reject) => {
86
+ // this will open tag modal
87
+ await setVisibleTaglist(true);
88
+ // until tag modal will not open promise will not execute
89
+ // once tag modal is opened it will start 2 sec interval to wait use has selected any tag or cancel the tag selection
90
+ const promise = new Promise((resolveP) => {
91
+ intervalTimer = setInterval(() => {
92
+ // this will execute, if user cancel the tag selection
93
+ if ((savedCallback.current || {}).close === true) {
94
+ reject();
95
+ clearInterval(intervalTimer);
96
+ return;
97
+ }
98
+ // this block is checking use has selected any tag or not
99
+ if (Object.keys(savedCallback.current || {}).length > 0) {
100
+ resolveP(savedCallback.current);
101
+ setSelectedTag({});
102
+ clearInterval(intervalTimer);
103
+ }
104
+ }, 2000);
105
+ });
106
+ // once prmise will resolve , pass the resolve data to handler to show tags in bee edior
107
+ const result = await promise;
108
+ resolve(result);
109
+ },
110
+ },
111
+ saveRow: {
112
+ handler: async (resolve, reject) => {
113
+ await setRowMetaModal(true);
114
+ const promise = new Promise((resolveP) => {
115
+ intervalTimer = setInterval(() => {
116
+ if ((savedCallback.current || {}).close === true) {
117
+ reject();
118
+ clearInterval(intervalTimer);
119
+ setRowMetaInfo({});
120
+ setRowName('');
121
+ setRowCategory('');
122
+ return;
123
+ }
124
+ if (Object.keys(savedCallback.current || {}).length > 0) {
125
+ resolveP(savedCallback.current);
126
+ }
127
+ }, 2000);
128
+ });
129
+ const result = await promise;
130
+ resolve(result); // "done!"
131
+ setRowMetaInfo({});
132
+ setRowName('');
133
+ setRowCategory('');
134
+ clearInterval(intervalTimer);
135
+ },
136
+ },
137
+ },
138
+ onSave: (jsonFile, htmlFile) => {
139
+ saveBeeData(jsonFile, htmlFile);
140
+ },
141
+ // will use this function on save row feature
142
+ onSaveRow: (rowJSON) => {
143
+ console.log('bee-plugin-container onSaveRows', rowJSON);
144
+ },
145
+ };
146
+ window.BeePlugin.create(tokenData, beeConfig, (instance) => {
147
+ beePluginInstance = instance;
148
+ const parseJson = JSON.parse(beeJson);
149
+ beePluginInstance.start(parseJson);
150
+ saveBeeInstance(beePluginInstance);
151
+ });
152
+ return () => clearInterval(intervalTimer);
153
+ }, []);
154
+
155
+ const onTagSelect = (result) => {
156
+ const msg = {
157
+ name: result,
158
+ value: `{{${result}}}`,
159
+ };
160
+ setSelectedTag(msg);
161
+ setVisibleTaglist(false);
162
+ };
163
+
164
+ const onCancelTagList = () => {
165
+ setVisibleTaglist(false);
166
+ setSelectedTag({close: true});
167
+ };
168
+
169
+ const handleCancel = () => {
170
+ setRowMetaModal(false);
171
+ setRowMetaInfo({close: true});
172
+ };
173
+
174
+ const handleOk = () => {
175
+ const rowInfo = {};
176
+ if (rowCategory !== '') {
177
+ rowInfo.category = rowCategory;
178
+ }
179
+ setRowMetaInfo({
180
+ name: rowName,
181
+ ...rowInfo,
182
+ });
183
+ setRowMetaModal(false);
184
+ };
185
+ const isDisableSave = () => rowName === '';
186
+
187
+ const onRowChange = useCallback((e) => {
188
+ setRowName(e.target.value);
189
+ });
190
+ const onChangeCategoy = (e) => {
191
+ setRowCategory(e);
192
+ };
193
+ const contentSection = <>
194
+ <CapInput
195
+ label={<FormattedMessage {...messages.rowName} />}
196
+ placeholder={formatMessage(messages.rowPlaceHolder)}
197
+ onChange={onRowChange}
198
+ value={rowName}
199
+ maxLength={50}
200
+ style={{ width: '324px', paddingBottom: '16px' }}
201
+ />
202
+ <CapSelect
203
+ label="Category"
204
+ style={{ width: 250, paddingBottom: '16px'}}
205
+ options={categoryOptions}
206
+ selectPlaceholder={formatMessage(messages.select)}
207
+ placeholder={
208
+ <FormattedMessage {...messages.selectCategoyPlaceholder} />
209
+ }
210
+ onChange={onChangeCategoy}
211
+ />
212
+
213
+ </>;
214
+ return (
215
+ <>
216
+ <div id="bee-plugin-container" style={{ height: '500px'}}>
217
+ </div>
218
+ <TagList
219
+ moduleFilterEnabled={moduleFilterEnabled}
220
+ label={label}
221
+ onTagSelect={onTagSelect}
222
+ location={location}
223
+ tags={filteredTags}
224
+ injectedTags={injectedTags}
225
+ className={className}
226
+ id={id}
227
+ userLocale={userLocale}
228
+ selectedOfferDetails={selectedOfferDetails}
229
+ visibleTaglist={visibleTaglist}
230
+ hidePopover
231
+ modalProps={{
232
+ onCancel: onCancelTagList,
233
+ style: { left: 135, top: 250 },
234
+ className: "bee-editor-tag-list",
235
+ }}
236
+ onContextChange={onContextChange}
237
+ />
238
+ <CapModal
239
+ visible={showRowMetaModal}
240
+ onCancel={handleCancel}
241
+ title={formatMessage(messages.customRows)}
242
+ footer={[
243
+ <CapButton key="back" onClick={handleCancel}>{formatMessage(messages.cancel)}</CapButton>,
244
+ <CapButton key="submit" type="primary" id="delete-version" onClick={handleOk} disabled={isDisableSave()}>
245
+ {formatMessage(messages.save)}
246
+ </CapButton>,
247
+ ]}
248
+ >
249
+ {contentSection}
250
+ </CapModal>
251
+ </>
252
+ );
253
+ }
254
+
255
+ BeeEditor.propTypes = {
256
+ beeJson: PropTypes.object.isRequired,
257
+ tokenData: PropTypes.object.isRequired,
258
+ uid: PropTypes.string.isRequired,
259
+ showTagsPopover: PropTypes.func.isRequired,
260
+ intl: intlShape.isRequired,
261
+ };
262
+
263
+ export default injectIntl(BeeEditor);
@@ -0,0 +1,11 @@
1
+ .cap-modal-v2.bee-editor-tag-list {
2
+ .ant-modal-content {
3
+ .ant-modal-body {
4
+ padding-top: 20px;
5
+ padding-bottom: 10px;
6
+ }
7
+ .ant-modal-footer {
8
+ display: none;
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,71 @@
1
+ /*
2
+ * BeeEditor Messages
3
+ *
4
+ * This contains all the text for the BeeEditor component.
5
+ */
6
+ import { defineMessages } from 'react-intl';
7
+
8
+ const prefix = 'creatives.componentsV2.BeeEditor';
9
+
10
+ export default defineMessages({
11
+ cancel: {
12
+ id: `${prefix}.cancel`,
13
+ defaultMessage: 'Cancel',
14
+ },
15
+ save: {
16
+ id: `${prefix}.save`,
17
+ defaultMessage: 'Save',
18
+ },
19
+ rowPlaceHolder: {
20
+ id: `${prefix}.rowPlaceHolder`,
21
+ defaultMessage: 'Enter Row name',
22
+ },
23
+ rowName: {
24
+ id: `${prefix}.rowName`,
25
+ defaultMessage: 'Row name',
26
+ },
27
+ select: {
28
+ id: `${prefix}.select`,
29
+ defaultMessage: 'Select',
30
+ },
31
+ customRows: {
32
+ id: `${prefix}.customRows`,
33
+ defaultMessage: 'Custom rows',
34
+ },
35
+ selectCategoyPlaceholder: {
36
+ id: `${prefix}.selectCategoyPlaceholder`,
37
+ defaultMessage: 'Select category',
38
+ },
39
+ tags: {
40
+ id: `${prefix}.tags`,
41
+ defaultMessage: 'Tags (optional)',
42
+ },
43
+ tagPlaceHolder: {
44
+ id: `${prefix}.tagPlaceHolder`,
45
+ defaultMessage: 'Enter tags',
46
+ },
47
+ addLabel: {
48
+ id: `${prefix}.addLabel`,
49
+ defaultMessage: 'Add label',
50
+ },
51
+ cta: {
52
+ id: `${prefix}.cta`,
53
+ defaultMessage: 'CTA',
54
+ },
55
+ header: {
56
+ id: `${prefix}.header`,
57
+ defaultMessage: 'Header',
58
+ },
59
+ footer: {
60
+ id: `${prefix}.footer`,
61
+ defaultMessage: 'Footer',
62
+ },
63
+ others: {
64
+ id: `${prefix}.others`,
65
+ defaultMessage: 'Others',
66
+ },
67
+ socialPlatform: {
68
+ id: `${prefix}.socialPlatform`,
69
+ defaultMessage: 'Social platform',
70
+ },
71
+ });
@@ -0,0 +1,10 @@
1
+ // import React from 'react';
2
+ // import { shallow } from 'enzyme';
3
+
4
+ // import Beeeditor from '../index';
5
+
6
+ describe('<Beeeditor />', () => {
7
+ it('Expect to have unit tests specified', () => {
8
+ expect(true).toEqual(false);
9
+ });
10
+ });