@capillarytech/creatives-library 6.12.10 → 6.12.12

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 (35) hide show
  1. package/package.json +2 -2
  2. package/telepresence.log +57 -0
  3. package/v2Components/BeeEditor/index.js +263 -0
  4. package/v2Components/BeeEditor/index.scss +11 -0
  5. package/v2Components/BeeEditor/messages.js +71 -0
  6. package/v2Components/BeeEditor/tests/index.test.js +10 -0
  7. package/v2Containers/Cap/constants.js +0 -4
  8. package/v2Containers/Cap/index.js +6 -210
  9. package/v2Containers/Cap/messages.js +0 -41
  10. package/v2Containers/Email/index.js +1 -2
  11. package/v2Containers/Line/Create/_lineCreate.scss +64 -0
  12. package/v2Containers/Line/Create/actions.js +94 -0
  13. package/v2Containers/Line/Create/constants.js +43 -0
  14. package/v2Containers/Line/Create/index.js +1132 -0
  15. package/v2Containers/Line/Create/initialSchema.js +378 -0
  16. package/v2Containers/Line/Create/messages.js +229 -0
  17. package/v2Containers/Line/Create/reducer.js +99 -0
  18. package/v2Containers/Line/Create/sagas.js +113 -0
  19. package/v2Containers/Line/Create/selectors.js +30 -0
  20. package/v2Containers/Line/CreateWrapper/constants.js +2 -0
  21. package/v2Containers/Line/CreateWrapper/index.js +117 -0
  22. package/v2Containers/Line/CreateWrapper/messages.js +55 -0
  23. package/v2Containers/Line/Edit/_lineEdit.scss +23 -0
  24. package/v2Containers/Line/Edit/actions.js +79 -0
  25. package/v2Containers/Line/Edit/constants.js +27 -0
  26. package/v2Containers/Line/Edit/index.js +1051 -0
  27. package/v2Containers/Line/Edit/messages.js +173 -0
  28. package/v2Containers/Line/Edit/reducer.js +83 -0
  29. package/v2Containers/Line/Edit/sagas.js +81 -0
  30. package/v2Containers/Line/Edit/selectors.js +29 -0
  31. package/v2Containers/Line/Edit/tests/actions.test.js +18 -0
  32. package/v2Containers/Line/Edit/tests/index.test.js +10 -0
  33. package/v2Containers/Line/Edit/tests/reducer.test.js +9 -0
  34. package/v2Containers/Line/Edit/tests/sagas.test.js +15 -0
  35. package/v2Containers/Line/Edit/tests/selectors.test.js +10 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capillarytech/creatives-library",
3
3
  "author": "meharaj",
4
- "version": "6.12.10",
4
+ "version": "6.12.12",
5
5
  "description": "Capillary creatives ui",
6
6
  "main": "./index.js",
7
7
  "module": "./index.es.js",
@@ -15,7 +15,7 @@
15
15
  "@babel/polyfill": "7.4.3",
16
16
  "@bugsnag/js": "^7.2.1",
17
17
  "@bugsnag/plugin-react": "^7.2.1",
18
- "@capillarytech/cap-ui-utils": "1.3.1",
18
+ "@capillarytech/cap-ui-utils": "^1.2.8",
19
19
  "@mailupinc/bee-plugin": "^1.2.0",
20
20
  "babel-cli": "^6.26.0",
21
21
  "chalk": "1.1.3",
@@ -0,0 +1,57 @@
1
+ 0.0 TEL | Telepresence 0.104 launched at Tue Oct 6 11:57:13 2020
2
+ 0.0 TEL | /usr/local/bin/telepresence --also-proxy 10.250.0.0/16 --deployment telepresence-perm
3
+ 0.0 TEL | uname: uname_result(system='Darwin', node='CAP-LAP-997.local', release='19.6.0', version='Darwin Kernel Version 19.6.0: Thu Jun 18 20:49:00 PDT 2020; root:xnu-6153.141.1~1/RELEASE_X86_64', machine='x86_64', processor='i386')
4
+ 0.0 TEL | Platform: darwin
5
+ 0.0 TEL | WSL: False
6
+ 0.0 TEL | Python 3.6.8 (v3.6.8:3c6b436a57, Dec 24 2018, 02:04:31)
7
+ 0.0 TEL | [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)]
8
+ 0.1 TEL | BEGIN SPAN main.py:40(main)
9
+ 0.1 TEL | BEGIN SPAN startup.py:83(set_kube_command)
10
+ 0.1 TEL | Found kubectl -> /usr/local/bin/kubectl
11
+ 0.1 TEL | [1] Capturing: kubectl config current-context
12
+ 0.1 TEL | [1] captured in 0.06 secs.
13
+ 0.1 TEL | [2] Capturing: kubectl --context default-context version --short
14
+ 1.9 TEL | [2] captured in 1.80 secs.
15
+ 1.9 TEL | [3] Capturing: kubectl --context default-context config view -o json
16
+ 2.0 TEL | [3] captured in 0.06 secs.
17
+ 2.0 TEL | [4] Capturing: kubectl --context default-context get ns default
18
+ 3.9 TEL | [4] captured in 1.96 secs.
19
+ 3.9 TEL | [5] Capturing: kubectl --context default-context api-versions
20
+ 6.1 TEL | [5] captured in 2.15 secs.
21
+ 6.1 TEL | Command: kubectl 1.18.8
22
+ 6.1 TEL | Context: default-context, namespace: default, version: 1.14.10
23
+ 6.1 >>> | Warning: kubectl 1.18.8 may not work correctly with cluster version 1.14.10 due to the version discrepancy. See https://kubernetes.io/docs/setup/version-skew-policy/ for more information.
24
+ 6.1 >>> |
25
+ 6.1 TEL | END SPAN startup.py:83(set_kube_command) 6.0s
26
+ 6.1 TEL | Found ssh -> /usr/bin/ssh
27
+ 6.1 TEL | [6] Capturing: ssh -V
28
+ 6.1 TEL | [6] captured in 0.01 secs.
29
+ 6.1 TEL | Found bash -> /bin/bash
30
+ 6.1 TEL | Found sshuttle-telepresence -> /usr/local/Cellar/telepresence/0.104/libexec/sshuttle-telepresence
31
+ 6.1 TEL | Found pfctl -> /sbin/pfctl
32
+ 6.1 TEL | Found sudo -> /usr/bin/sudo
33
+ 6.1 TEL | [7] Running: sudo -n echo -n
34
+ 6.2 TEL | [7] ran in 0.05 secs.
35
+ 6.2 >>> | Starting proxy with method 'vpn-tcp', which has the following limitations: All processes are affected, only one telepresence can run per machine, and you can't use other VPNs. You may need to add cloud hosts and headless services with --also-proxy. For a full list of method limitations see https://telepresence.io/reference/methods.html
36
+ 6.2 TEL | Found sshfs -> /usr/local/bin/sshfs
37
+ 6.2 TEL | Found umount -> /sbin/umount
38
+ 6.2 >>> | Volumes are rooted at $TELEPRESENCE_ROOT. See https://telepresence.io/howto/volumes.html for details.
39
+ 6.2 TEL | [8] Running: kubectl --context default-context --namespace default get pods telepresence-connectivity-check --ignore-not-found
40
+ 7.8 TEL | [8] ran in 1.67 secs.
41
+ 8.4 TEL | Scout info: {'latest_version': '0.104', 'FAILED': '<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)>'}
42
+ 8.4 >>> | Starting network proxy to cluster using the existing proxy Deployment telepresence-perm
43
+ 8.4 TEL | [9] Running: kubectl --context default-context --namespace default get deployment telepresence-perm
44
+ 10.3 9 | Error from server (NotFound): deployments.extensions "telepresence-perm" not found
45
+ 10.3 TEL | [9] exit 1 in 1.85 secs.
46
+ 10.3 >>> |
47
+ 10.3 >>> | Failed to find deployment telepresence-perm:
48
+ 10.3 >>> | Error from server (NotFound): deployments.extensions "telepresence-perm" not found
49
+ 10.3 >>> |
50
+ 10.3 TEL | EXITING with status code 255
51
+ 10.3 >>> | Exit cleanup in progress
52
+ 10.3 TEL | (Cleanup) Kill sudo privileges holder
53
+ 10.3 TEL | (Cleanup) Stop time tracking
54
+ 10.3 TEL | END SPAN main.py:40(main) 10.2s
55
+ 10.3 TEL | (Cleanup) Remove temporary directory
56
+ 10.3 TEL | (Cleanup) Save caches
57
+ 11.2 TEL | (sudo privileges holder thread exiting)
@@ -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
+ });
@@ -31,7 +31,3 @@ export const CLEAR_TOPBAR_MENU_DATA = 'creatives/cap/CLEAR_TOPBAR_MENU_DATA';
31
31
  export const CAMPAIGN_SETTINGS_URL = '/creatives/settings/message';
32
32
  export const ORG_SETTINGS_URL = '/org/index';
33
33
  export const HELP_URL = 'https://support.capillarytech.com/en/support/solutions/4000007853';
34
-
35
- export const ORG_REFRESH_SEC = 10;
36
- export const ORG_CHANGED = 'ORG_CHANGED';
37
-