@capillarytech/creatives-library 8.0.337 → 8.0.338
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/package.json +1 -1
- package/utils/tests/tagValidations.test.js +20 -0
- package/v2Components/CapTagList/index.js +28 -23
- package/v2Components/CapTagList/style.scss +29 -0
- package/v2Components/CapTagListWithInput/__tests__/CapTagListWithInput.test.js +63 -0
- package/v2Components/CapTagListWithInput/index.js +4 -0
- package/v2Components/CapWhatsappCTA/index.js +2 -0
- package/v2Components/FormBuilder/index.js +7 -0
- package/v2Components/HtmlEditor/HTMLEditor.js +6 -1
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +1 -0
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +927 -2
- package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +3 -0
- package/v2Components/mockdata.js +1 -0
- package/v2Containers/BeeEditor/index.js +3 -0
- package/v2Containers/CreativesContainer/SlideBoxContent.js +28 -1
- package/v2Containers/CreativesContainer/index.js +3 -0
- package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +47 -0
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +5 -0
- package/v2Containers/Email/index.js +2 -1
- package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +6 -1
- package/v2Containers/EmailWrapper/components/EmailWrapperView.js +3 -0
- package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +20 -2
- package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +16 -1
- package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +3 -0
- package/v2Containers/EmailWrapper/index.js +4 -0
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +1 -0
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +9 -0
- package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +1 -0
- package/v2Containers/MobilePush/Create/index.js +2 -0
- package/v2Containers/MobilePush/Edit/index.js +2 -0
- package/v2Containers/MobilepushWrapper/index.js +3 -1
- package/v2Containers/Rcs/index.js +1 -0
- package/v2Containers/Sms/Create/index.js +2 -0
- package/v2Containers/Sms/Edit/index.js +2 -0
- package/v2Containers/SmsTrai/Edit/index.js +2 -0
- package/v2Containers/SmsWrapper/index.js +2 -0
- package/v2Containers/TagList/index.js +62 -5
- package/v2Containers/TagList/messages.js +4 -0
- package/v2Containers/TagList/tests/TagList.test.js +124 -20
- package/v2Containers/TagList/tests/mockdata.js +17 -0
- package/v2Containers/Viber/index.js +3 -0
- package/v2Containers/WebPush/Create/hooks/useTagManagement.js +0 -2
- package/v2Containers/WebPush/Create/index.js +9 -1
- package/v2Containers/Whatsapp/index.js +5 -0
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +20 -0
- package/v2Containers/Zalo/index.js +2 -0
package/package.json
CHANGED
|
@@ -360,6 +360,26 @@ describe("validateTags", () => {
|
|
|
360
360
|
expect(resultWhitespace.valid).toBe(true);
|
|
361
361
|
expect(resultWhitespace.unsupportedTags ?? []).toEqual([]);
|
|
362
362
|
});
|
|
363
|
+
|
|
364
|
+
it('should treat tags from waitEventContextTags as supported', () => {
|
|
365
|
+
const content = 'Hello {{waitEvent.orderId}}';
|
|
366
|
+
const tagsParam = [];
|
|
367
|
+
const injectedTagsParams = [];
|
|
368
|
+
const location = { query: { module: 'DEFAULT' } };
|
|
369
|
+
const tagModule = null;
|
|
370
|
+
|
|
371
|
+
const result = validateTags({
|
|
372
|
+
content,
|
|
373
|
+
tagsParam,
|
|
374
|
+
injectedTagsParams,
|
|
375
|
+
location,
|
|
376
|
+
tagModule,
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
expect(result.valid).toEqual(true);
|
|
380
|
+
expect(result.missingTags).toEqual([]);
|
|
381
|
+
expect(result.isBraceError).toEqual(false);
|
|
382
|
+
});
|
|
363
383
|
});
|
|
364
384
|
|
|
365
385
|
describe('validateTags wrapper (v2 consumers)', () => {
|
|
@@ -44,6 +44,7 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
|
|
|
44
44
|
super(props);
|
|
45
45
|
this.state = {
|
|
46
46
|
tagValue: '',
|
|
47
|
+
selectedNodeKey: '',
|
|
47
48
|
expandedKeys: [],
|
|
48
49
|
searchValue: '',
|
|
49
50
|
autoExpandParent: true,
|
|
@@ -122,9 +123,11 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
|
|
|
122
123
|
this.handleOnExpand(info.node.props.eventKey);
|
|
123
124
|
};
|
|
124
125
|
|
|
125
|
-
getSearchedExpandedKeys(tags, value = '') {
|
|
126
|
+
getSearchedExpandedKeys(tags, value = '', parentPath = '') {
|
|
126
127
|
let list = [];
|
|
127
128
|
_.forEach(tags, (val = {}, key) => {
|
|
129
|
+
const rawKey = val?.incentiveSeriesId ? `${key}(${val?.incentiveSeriesId})` : `${key}`;
|
|
130
|
+
const nodeKey = parentPath ? `${parentPath}.${rawKey}` : rawKey;
|
|
128
131
|
const tagName =
|
|
129
132
|
typeof val?.name === 'string'
|
|
130
133
|
? _.toLower(_.get(val, "name", ""))
|
|
@@ -137,16 +140,16 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
|
|
|
137
140
|
&& (tagName.includes(searchStringLower)
|
|
138
141
|
|| tagNameWithoutUnderscore.includes(searchStringLower))
|
|
139
142
|
) {
|
|
140
|
-
list.push(
|
|
143
|
+
list.push(nodeKey);
|
|
141
144
|
}
|
|
142
|
-
const temp = this.getSearchedExpandedKeys(val?.subtags, value);
|
|
145
|
+
const temp = this.getSearchedExpandedKeys(val?.subtags, value, nodeKey);
|
|
143
146
|
list = list.concat(temp);
|
|
144
147
|
} else if (
|
|
145
148
|
val?.name
|
|
146
149
|
&& (tagName.includes(searchStringLower)
|
|
147
150
|
|| tagNameWithoutUnderscore.includes(searchStringLower))
|
|
148
151
|
) {
|
|
149
|
-
list.push(
|
|
152
|
+
list.push(nodeKey);
|
|
150
153
|
}
|
|
151
154
|
});
|
|
152
155
|
return list;
|
|
@@ -200,12 +203,17 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
|
|
|
200
203
|
handleOnSelect = (selectedKeys, info) => {
|
|
201
204
|
if (selectedKeys.length > 0) {
|
|
202
205
|
if (info && info.selectedNodes && info.selectedNodes.length > 0 && info.selectedNodes[0].props.isLeaf) {
|
|
203
|
-
|
|
204
|
-
const
|
|
206
|
+
const selectedNode = info.selectedNodes[0];
|
|
207
|
+
const selectedTagValue = selectedNode?.props?.tagKey || selectedKeys[0];
|
|
208
|
+
this.setState({
|
|
209
|
+
tagValue: selectedTagValue,
|
|
210
|
+
selectedNodeKey: selectedKeys[0],
|
|
211
|
+
});
|
|
212
|
+
const ifDynamicTag = this.checkIfDynamicTag(selectedTagValue);
|
|
205
213
|
if (ifDynamicTag) {
|
|
206
214
|
this.renderDynamicTagFlow();
|
|
207
215
|
} else {
|
|
208
|
-
this.props.onSelect(
|
|
216
|
+
this.props.onSelect([selectedTagValue], info);
|
|
209
217
|
this.setState({visible: false});
|
|
210
218
|
}
|
|
211
219
|
} else if (info && info.selectedNodes && info.selectedNodes.length > 0 && !info.selectedNodes[0].props.isLeaf) {
|
|
@@ -237,7 +245,7 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
|
|
|
237
245
|
this.setState({showModal: true, visible: false});
|
|
238
246
|
};
|
|
239
247
|
|
|
240
|
-
renderTags = (tags) => {
|
|
248
|
+
renderTags = (tags, parentPath = '') => {
|
|
241
249
|
const searchString = this.state.searchValue || '';
|
|
242
250
|
const {
|
|
243
251
|
disableRelatedTags, childTagsToDisable, parentTagstoDisable,
|
|
@@ -260,6 +268,8 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
|
|
|
260
268
|
clonedTags = _.omit(clonedTags, CUSTOMER_BARCODE_TAG);
|
|
261
269
|
}
|
|
262
270
|
_.forEach(clonedTags, (val = '', key) => {
|
|
271
|
+
const rawKey = val?.incentiveSeriesId ? `${key}(${val?.incentiveSeriesId})` : `${key}`;
|
|
272
|
+
const nodeKey = parentPath ? `${parentPath}.${rawKey}` : rawKey;
|
|
263
273
|
let supportedTagsString = '';
|
|
264
274
|
_.forEach(val.supportedTags, (supportedTag) => {
|
|
265
275
|
supportedTagsString += `${supportedTag} ,`;
|
|
@@ -276,13 +286,14 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
|
|
|
276
286
|
|| tagNameWithoutUnderscore.includes(searchStringLower));
|
|
277
287
|
if (_.has(val, 'subtags')) {
|
|
278
288
|
const disabled = disableRelatedTags ? parentTagstoDisable.includes(key) : false;
|
|
279
|
-
const temp = this.renderTags(val?.subtags);
|
|
289
|
+
const temp = this.renderTags(val?.subtags, nodeKey);
|
|
280
290
|
if (temp?.length) {
|
|
281
291
|
const tagValue = (
|
|
282
292
|
<CapTreeNode
|
|
283
293
|
title={disabled ? <CapTooltip title={loyaltyAttrDisableText}>{val?.name}</CapTooltip> : val?.name}
|
|
284
294
|
tag={val}
|
|
285
|
-
|
|
295
|
+
tagKey={rawKey}
|
|
296
|
+
key={nodeKey}
|
|
286
297
|
disabled={disabled}
|
|
287
298
|
>
|
|
288
299
|
{temp}
|
|
@@ -317,12 +328,9 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
|
|
|
317
328
|
)
|
|
318
329
|
}
|
|
319
330
|
tag={val}
|
|
331
|
+
tagKey={rawKey}
|
|
320
332
|
isLeaf
|
|
321
|
-
key={
|
|
322
|
-
val?.incentiveSeriesId
|
|
323
|
-
? `${key}(${val?.incentiveSeriesId})`
|
|
324
|
-
: `${key}`
|
|
325
|
-
}
|
|
333
|
+
key={nodeKey}
|
|
326
334
|
disabled={childDisabled}
|
|
327
335
|
>
|
|
328
336
|
</CapTreeNode>
|
|
@@ -353,12 +361,9 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
|
|
|
353
361
|
)
|
|
354
362
|
}
|
|
355
363
|
tag={val}
|
|
364
|
+
tagKey={rawKey}
|
|
356
365
|
isLeaf
|
|
357
|
-
key={
|
|
358
|
-
val?.incentiveSeriesId
|
|
359
|
-
? `${key}(${val?.incentiveSeriesId})`
|
|
360
|
-
: `${key}`
|
|
361
|
-
}
|
|
366
|
+
key={nodeKey}
|
|
362
367
|
disabled={childDisabled}
|
|
363
368
|
>
|
|
364
369
|
</CapTreeNode>
|
|
@@ -385,7 +390,7 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
|
|
|
385
390
|
} = this.props;
|
|
386
391
|
const {formatMessage} = intl;
|
|
387
392
|
const {
|
|
388
|
-
tagValue, expandedKeys, autoExpandParent, visible, translationLang, selectedContext, isLoadingLoyaltyTags, isLoadingContextChange,
|
|
393
|
+
tagValue, selectedNodeKey, expandedKeys, autoExpandParent, visible, translationLang, selectedContext, isLoadingLoyaltyTags, isLoadingContextChange,
|
|
389
394
|
} = this.state;
|
|
390
395
|
|
|
391
396
|
// Show loading spinner if general loading OR if specifically loading loyalty tags OR if context change is in progress
|
|
@@ -404,7 +409,7 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
|
|
|
404
409
|
},
|
|
405
410
|
];
|
|
406
411
|
const contentSection = (
|
|
407
|
-
<CapRow>
|
|
412
|
+
<CapRow className="cap-tag-list-popover-inner">
|
|
408
413
|
<CapSpin tip={formatMessage(messages.gettingTags)} spinning={shouldShowLoading}>
|
|
409
414
|
<Search
|
|
410
415
|
style={{ marginBottom: 8, width: '250px'}}
|
|
@@ -424,7 +429,7 @@ class CapTagList extends React.Component { // eslint-disable-line react/prefer-s
|
|
|
424
429
|
<CapTree
|
|
425
430
|
styling={{height: '350px', overflow: 'auto'}}
|
|
426
431
|
onSelect={this.handleOnSelect}
|
|
427
|
-
selectedKeys={
|
|
432
|
+
selectedKeys={selectedNodeKey ? [selectedNodeKey] : []}
|
|
428
433
|
expandedKeys={expandedKeys}
|
|
429
434
|
autoExpandParent={autoExpandParent}
|
|
430
435
|
onExpand={this.onExpand}
|
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
@import "~@capillarytech/cap-ui-library/styles/_variables";
|
|
2
2
|
|
|
3
|
+
.cap-tag-list-popover-inner {
|
|
4
|
+
max-width: 20rem;
|
|
5
|
+
min-width: 0;
|
|
6
|
+
box-sizing: border-box;
|
|
7
|
+
|
|
8
|
+
.ant-tree.cap-tree-v2.ant-tree-icon-hide {
|
|
9
|
+
width: 100%;
|
|
10
|
+
max-width: 100%;
|
|
11
|
+
|
|
12
|
+
ul {
|
|
13
|
+
max-width: 100%;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
li {
|
|
17
|
+
overflow: hidden;
|
|
18
|
+
max-width: 100%;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
li .ant-tree-node-content-wrapper {
|
|
22
|
+
width: calc(100% - 3.5rem); // leave room for switcher (~24px)
|
|
23
|
+
max-width: calc(100% - 3.5rem);
|
|
24
|
+
overflow: hidden;
|
|
25
|
+
vertical-align: top;
|
|
26
|
+
box-sizing: border-box;
|
|
27
|
+
text-overflow: ellipsis;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
3
32
|
@media (max-height: 25rem) {
|
|
4
33
|
.ant-tree.cap-tree-v2.ant-tree-icon-hide {
|
|
5
34
|
height: 8.5714rem;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { render, screen } from '@testing-library/react';
|
|
3
|
+
import '@testing-library/jest-dom';
|
|
4
|
+
import { IntlProvider } from 'react-intl';
|
|
5
|
+
import CapTagListWithInput from '../index';
|
|
6
|
+
|
|
7
|
+
const capturedTagListProps = { current: null };
|
|
8
|
+
|
|
9
|
+
jest.mock('../../../v2Containers/TagList', () => {
|
|
10
|
+
const React = require('react');
|
|
11
|
+
const Mock = (props) => {
|
|
12
|
+
capturedTagListProps.current = props;
|
|
13
|
+
return <div data-testid="mock-tag-list">TagList</div>;
|
|
14
|
+
};
|
|
15
|
+
return Mock;
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
jest.mock('@capillarytech/cap-ui-library/CapRow', () => ({ children }) => <div>{children}</div>);
|
|
19
|
+
jest.mock('@capillarytech/cap-ui-library/CapColumn', () => ({ children }) => <div>{children}</div>);
|
|
20
|
+
jest.mock('@capillarytech/cap-ui-library/CapHeading', () => () => null);
|
|
21
|
+
jest.mock('@capillarytech/cap-ui-library/CapInput', () => () => <input data-testid="cap-input" />);
|
|
22
|
+
|
|
23
|
+
const waitMap = {
|
|
24
|
+
b1: { eventName: 'Order Placed', blockName: 'Wait', tags: [] },
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
describe('CapTagListWithInput', () => {
|
|
28
|
+
beforeEach(() => {
|
|
29
|
+
capturedTagListProps.current = null;
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('forwards waitEventContextTags to TagList', () => {
|
|
33
|
+
render(
|
|
34
|
+
<IntlProvider locale="en" messages={{}}>
|
|
35
|
+
<CapTagListWithInput
|
|
36
|
+
inputId="test-url"
|
|
37
|
+
inputOnChange={jest.fn()}
|
|
38
|
+
waitEventContextTags={waitMap}
|
|
39
|
+
onTagSelect={jest.fn()}
|
|
40
|
+
onContextChange={jest.fn()}
|
|
41
|
+
/>
|
|
42
|
+
</IntlProvider>
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
expect(screen.getByTestId('mock-tag-list')).toBeInTheDocument();
|
|
46
|
+
expect(capturedTagListProps.current.waitEventContextTags).toEqual(waitMap);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('uses default empty object for waitEventContextTags when omitted', () => {
|
|
50
|
+
render(
|
|
51
|
+
<IntlProvider locale="en" messages={{}}>
|
|
52
|
+
<CapTagListWithInput
|
|
53
|
+
inputId="test-url"
|
|
54
|
+
inputOnChange={jest.fn()}
|
|
55
|
+
onTagSelect={jest.fn()}
|
|
56
|
+
onContextChange={jest.fn()}
|
|
57
|
+
/>
|
|
58
|
+
</IntlProvider>
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
expect(capturedTagListProps.current.waitEventContextTags).toEqual({});
|
|
62
|
+
});
|
|
63
|
+
});
|
|
@@ -27,6 +27,7 @@ export const CapTagListWithInput = (props) => {
|
|
|
27
27
|
userLocale = 'en',
|
|
28
28
|
eventContextTags = [],
|
|
29
29
|
restrictPersonalization = false,
|
|
30
|
+
waitEventContextTags = {},
|
|
30
31
|
// CapInput props
|
|
31
32
|
inputId,
|
|
32
33
|
inputValue = '',
|
|
@@ -77,6 +78,7 @@ export const CapTagListWithInput = (props) => {
|
|
|
77
78
|
userLocale={userLocale}
|
|
78
79
|
selectedOfferDetails={selectedOfferDetails}
|
|
79
80
|
eventContextTags={eventContextTags}
|
|
81
|
+
waitEventContextTags={waitEventContextTags}
|
|
80
82
|
style={tagListStyle}
|
|
81
83
|
popoverPlacement={popoverPlacement}
|
|
82
84
|
restrictPersonalization={restrictPersonalization}
|
|
@@ -116,6 +118,7 @@ CapTagListWithInput.propTypes = {
|
|
|
116
118
|
userLocale: PropTypes.string,
|
|
117
119
|
eventContextTags: PropTypes.array,
|
|
118
120
|
restrictPersonalization: PropTypes.bool,
|
|
121
|
+
waitEventContextTags: PropTypes.object,
|
|
119
122
|
|
|
120
123
|
// CapInput props
|
|
121
124
|
inputId: PropTypes.string.isRequired,
|
|
@@ -154,6 +157,7 @@ CapTagListWithInput.defaultProps = {
|
|
|
154
157
|
userLocale: 'en',
|
|
155
158
|
eventContextTags: [],
|
|
156
159
|
restrictPersonalization: false,
|
|
160
|
+
waitEventContextTags: {},
|
|
157
161
|
inputValue: '',
|
|
158
162
|
inputSize: 'default',
|
|
159
163
|
inputRequired: false,
|
|
@@ -52,6 +52,7 @@ export const CapWhatsappCTA = (props) => {
|
|
|
52
52
|
injectedTags = {},
|
|
53
53
|
selectedOfferDetails = [],
|
|
54
54
|
eventContextTags = [],
|
|
55
|
+
waitEventContextTags = {},
|
|
55
56
|
} = props;
|
|
56
57
|
const { formatMessage } = intl;
|
|
57
58
|
const invalidVarRegex = /{{(.*?)}}/g;
|
|
@@ -283,6 +284,7 @@ export const CapWhatsappCTA = (props) => {
|
|
|
283
284
|
injectedTags={injectedTags}
|
|
284
285
|
selectedOfferDetails={selectedOfferDetails}
|
|
285
286
|
eventContextTags={eventContextTags}
|
|
287
|
+
waitEventContextTags={waitEventContextTags}
|
|
286
288
|
/>
|
|
287
289
|
</CapColumn>
|
|
288
290
|
)}
|
|
@@ -2990,6 +2990,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
2990
2990
|
selectedOfferDetails={this.props.selectedOfferDetails}
|
|
2991
2991
|
eventContextTags={this.props?.eventContextTags}
|
|
2992
2992
|
restrictPersonalization={this.props.restrictPersonalization}
|
|
2993
|
+
waitEventContextTags={this.props?.waitEventContextTags}
|
|
2993
2994
|
/>
|
|
2994
2995
|
</CapColumn>
|
|
2995
2996
|
);
|
|
@@ -3019,6 +3020,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
3019
3020
|
userLocale={this.props.userLocale}
|
|
3020
3021
|
selectedOfferDetails={this.props.selectedOfferDetails}
|
|
3021
3022
|
eventContextTags={this.props?.eventContextTags}
|
|
3023
|
+
waitEventContextTags={this.props?.waitEventContextTags}
|
|
3022
3024
|
moduleFilterEnabled={this.props.location && this.props.location.query && this.props.location.query.type !== 'embedded'}
|
|
3023
3025
|
containerStyle={val.style || {}}
|
|
3024
3026
|
inputProps={val.inputProps || {}}
|
|
@@ -3658,6 +3660,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
3658
3660
|
channel={channel}
|
|
3659
3661
|
eventContextTags={this.props?.eventContextTags}
|
|
3660
3662
|
restrictPersonalization={this.props.restrictPersonalization}
|
|
3663
|
+
waitEventContextTags={this.props?.waitEventContextTags}
|
|
3661
3664
|
/>
|
|
3662
3665
|
</CapColumn>
|
|
3663
3666
|
);
|
|
@@ -3704,6 +3707,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
3704
3707
|
userLocale={this.state.translationLang}
|
|
3705
3708
|
selectedOfferDetails={this.props.selectedOfferDetails}
|
|
3706
3709
|
eventContextTags={this.props?.eventContextTags}
|
|
3710
|
+
waitEventContextTags={this.props?.waitEventContextTags}
|
|
3707
3711
|
moduleFilterEnabled={moduleFilterEnabledForCapTagList}
|
|
3708
3712
|
containerStyle={val.style || {}}
|
|
3709
3713
|
inputProps={val.inputProps || {}}
|
|
@@ -3998,6 +4002,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
|
|
|
3998
4002
|
onContextChange={this.props.onContextChange}
|
|
3999
4003
|
moduleFilterEnabled={isModuleFilterEnabled}
|
|
4000
4004
|
eventContextTags={this.props?.eventContextTags}
|
|
4005
|
+
waitEventContextTags={this.props?.waitEventContextTags}
|
|
4001
4006
|
isGetBeeData={this.props?.isGetBeeData}
|
|
4002
4007
|
getBEEData={this.props?.getBEEData}
|
|
4003
4008
|
/>
|
|
@@ -4302,6 +4307,7 @@ FormBuilder.defaultProps = {
|
|
|
4302
4307
|
userLocale: localStorage.getItem('jlocale') || 'en',
|
|
4303
4308
|
showLiquidErrorInFooter: () => {},
|
|
4304
4309
|
metaDataStatus: "",
|
|
4310
|
+
waitEventContextTags: {},
|
|
4305
4311
|
isTestAndPreviewMode: false, // Default to false to maintain existing behavior
|
|
4306
4312
|
};
|
|
4307
4313
|
|
|
@@ -4352,6 +4358,7 @@ FormBuilder.propTypes = {
|
|
|
4352
4358
|
moduleType: PropTypes.string.isRequired,
|
|
4353
4359
|
showLiquidErrorInFooter: PropTypes.bool.isRequired,
|
|
4354
4360
|
eventContextTags: PropTypes.array.isRequired,
|
|
4361
|
+
waitEventContextTags: PropTypes.object,
|
|
4355
4362
|
forwardedTags: PropTypes.object.isRequired,
|
|
4356
4363
|
isLoyaltyModule: PropTypes.bool.isRequired,
|
|
4357
4364
|
isTestAndPreviewMode: PropTypes.bool, // Add new prop type
|
|
@@ -94,6 +94,7 @@ const HTMLEditor = forwardRef(({
|
|
|
94
94
|
injectedTags = {},
|
|
95
95
|
location,
|
|
96
96
|
eventContextTags = [],
|
|
97
|
+
waitEventContextTags,
|
|
97
98
|
selectedOfferDetails = [],
|
|
98
99
|
channel,
|
|
99
100
|
userLocale = 'en',
|
|
@@ -361,7 +362,7 @@ const HTMLEditor = forwardRef(({
|
|
|
361
362
|
const issueCounts = calculateIssueCounts();
|
|
362
363
|
const isContentEmpty = !currentContent || currentContent.trim() === '';
|
|
363
364
|
|
|
364
|
-
// hasErrors = only Rule Group #1 (Input & Sanitization)
|
|
365
|
+
// hasErrors = only Rule Group #1 (Input & Sanitization) - gates Done/Update/Preview/Test
|
|
365
366
|
const newState = {
|
|
366
367
|
isContentEmpty,
|
|
367
368
|
issueCounts,
|
|
@@ -663,6 +664,7 @@ const HTMLEditor = forwardRef(({
|
|
|
663
664
|
injectedTags={injectedTags}
|
|
664
665
|
location={location}
|
|
665
666
|
eventContextTags={eventContextTags}
|
|
667
|
+
waitEventContextTags={waitEventContextTags}
|
|
666
668
|
selectedOfferDetails={selectedOfferDetails}
|
|
667
669
|
channel={channel}
|
|
668
670
|
userLocale={userLocale}
|
|
@@ -734,6 +736,7 @@ const HTMLEditor = forwardRef(({
|
|
|
734
736
|
injectedTags={injectedTags}
|
|
735
737
|
location={location}
|
|
736
738
|
eventContextTags={eventContextTags}
|
|
739
|
+
waitEventContextTags={waitEventContextTags}
|
|
737
740
|
selectedOfferDetails={selectedOfferDetails}
|
|
738
741
|
channel={channel}
|
|
739
742
|
userLocale={userLocale}
|
|
@@ -772,6 +775,7 @@ HTMLEditor.propTypes = {
|
|
|
772
775
|
injectedTags: PropTypes.object,
|
|
773
776
|
location: PropTypes.object,
|
|
774
777
|
eventContextTags: PropTypes.array,
|
|
778
|
+
waitEventContextTags: PropTypes.object,
|
|
775
779
|
selectedOfferDetails: PropTypes.array,
|
|
776
780
|
channel: PropTypes.string,
|
|
777
781
|
userLocale: PropTypes.string,
|
|
@@ -805,6 +809,7 @@ HTMLEditor.defaultProps = {
|
|
|
805
809
|
injectedTags: {},
|
|
806
810
|
location: null,
|
|
807
811
|
eventContextTags: [],
|
|
812
|
+
waitEventContextTags: {},
|
|
808
813
|
selectedOfferDetails: [],
|
|
809
814
|
channel: null,
|
|
810
815
|
userLocale: 'en',
|