@capillarytech/creatives-library 8.0.316-alpha.4 → 8.0.317-alpha.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 (91) hide show
  1. package/constants/unified.js +1 -0
  2. package/package.json +1 -1
  3. package/services/api.js +6 -0
  4. package/services/tests/api.test.js +7 -0
  5. package/utils/common.js +6 -1
  6. package/utils/tests/tagValidations.test.js +34 -0
  7. package/v2Components/CapTagList/index.js +15 -22
  8. package/v2Components/CapTagList/style.scss +48 -0
  9. package/v2Components/CapTagListWithInput/__tests__/CapTagListWithInput.test.js +63 -0
  10. package/v2Components/CapTagListWithInput/index.js +4 -0
  11. package/v2Components/CapWhatsappCTA/index.js +2 -0
  12. package/v2Components/CommonTestAndPreview/tests/CustomValuesEditor.test.js +180 -0
  13. package/v2Components/CommonTestAndPreview/tests/DeliverySettings/utils/parseSenderDetailsResponse.test.js +96 -0
  14. package/v2Components/CommonTestAndPreview/tests/UnifiedPreview/index.test.js +99 -0
  15. package/v2Components/CommonTestAndPreview/tests/index.test.js +113 -3
  16. package/v2Components/FormBuilder/index.js +7 -0
  17. package/v2Components/HtmlEditor/HTMLEditor.js +6 -1
  18. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +1 -0
  19. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +927 -2
  20. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +3 -0
  21. package/v2Components/SmsFallback/tests/useLocalTemplateList.test.js +95 -0
  22. package/v2Containers/BeeEditor/index.js +3 -0
  23. package/v2Containers/CommunicationFlow/CommunicationFlow.js +291 -0
  24. package/v2Containers/CommunicationFlow/CommunicationFlow.scss +25 -0
  25. package/v2Containers/CommunicationFlow/Tests/CommunicationFlow.test.js +255 -0
  26. package/v2Containers/CommunicationFlow/constants.js +200 -0
  27. package/v2Containers/CommunicationFlow/index.js +102 -0
  28. package/v2Containers/CommunicationFlow/messages.js +346 -0
  29. package/v2Containers/CommunicationFlow/steps/ChannelSelectionStep/ChannelSelectionStep.js +522 -0
  30. package/v2Containers/CommunicationFlow/steps/ChannelSelectionStep/ChannelSelectionStep.scss +170 -0
  31. package/v2Containers/CommunicationFlow/steps/ChannelSelectionStep/Tests/ChannelSelectionStep.test.js +796 -0
  32. package/v2Containers/CommunicationFlow/steps/ChannelSelectionStep/index.js +5 -0
  33. package/v2Containers/CommunicationFlow/steps/CommunicationStrategyStep/CommunicationStrategyStep.js +95 -0
  34. package/v2Containers/CommunicationFlow/steps/CommunicationStrategyStep/Tests/CommunicationStrategyStep.test.js +133 -0
  35. package/v2Containers/CommunicationFlow/steps/CommunicationStrategyStep/index.js +5 -0
  36. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/DeliverySettingsSection.js +289 -0
  37. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/DeliverySettingsSection.scss +70 -0
  38. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/SenderDetails.js +319 -0
  39. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/SenderDetails.scss +69 -0
  40. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/Tests/DeliverySettingsSection.test.js +616 -0
  41. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/Tests/SenderDetails.test.js +577 -0
  42. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/Tests/deliverySettingsConfig.test.js +1111 -0
  43. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/deliverySettingsConfig.js +696 -0
  44. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/index.js +7 -0
  45. package/v2Containers/CommunicationFlow/steps/DynamicControlsStep/DynamicControlsStep.js +102 -0
  46. package/v2Containers/CommunicationFlow/steps/DynamicControlsStep/DynamicControlsStep.scss +36 -0
  47. package/v2Containers/CommunicationFlow/steps/DynamicControlsStep/Tests/DynamicControlsStep.test.js +91 -0
  48. package/v2Containers/CommunicationFlow/steps/DynamicControlsStep/index.js +5 -0
  49. package/v2Containers/CommunicationFlow/steps/MessageTypeStep/MessageTypeStep.js +86 -0
  50. package/v2Containers/CommunicationFlow/steps/MessageTypeStep/Tests/MessageTypeStep.test.js +100 -0
  51. package/v2Containers/CommunicationFlow/steps/MessageTypeStep/index.js +5 -0
  52. package/v2Containers/CommunicationFlow/utils/getEnabledSteps.js +30 -0
  53. package/v2Containers/CreativesContainer/SlideBoxContent.js +28 -1
  54. package/v2Containers/CreativesContainer/constants.js +3 -0
  55. package/v2Containers/CreativesContainer/index.js +3 -0
  56. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +104 -0
  57. package/v2Containers/CreativesContainer/tests/SlideBoxHeader.test.js +110 -0
  58. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxHeader.test.js.snap +363 -0
  59. package/v2Containers/CreativesContainer/tests/embeddedSlideboxUtils.test.js +258 -0
  60. package/v2Containers/Email/index.js +1 -0
  61. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +7 -1
  62. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +3 -0
  63. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +20 -2
  64. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +16 -1
  65. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +3 -0
  66. package/v2Containers/EmailWrapper/index.js +4 -0
  67. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +1 -0
  68. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +9 -0
  69. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +19 -0
  70. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +3 -0
  71. package/v2Containers/InAppWrapper/index.js +3 -0
  72. package/v2Containers/MobilePush/Create/index.js +2 -0
  73. package/v2Containers/MobilePush/Edit/index.js +2 -0
  74. package/v2Containers/MobilepushWrapper/index.js +3 -1
  75. package/v2Containers/Rcs/index.js +1 -0
  76. package/v2Containers/Sms/Create/index.js +2 -0
  77. package/v2Containers/Sms/Edit/index.js +2 -0
  78. package/v2Containers/Sms/tests/smsFormDataHelpers.test.js +253 -0
  79. package/v2Containers/SmsTrai/Edit/index.js +2 -0
  80. package/v2Containers/SmsWrapper/index.js +2 -0
  81. package/v2Containers/TagList/index.js +41 -2
  82. package/v2Containers/TagList/messages.js +4 -0
  83. package/v2Containers/TagList/tests/TagList.test.js +122 -20
  84. package/v2Containers/TagList/tests/mockdata.js +17 -0
  85. package/v2Containers/Templates/tests/sagas.test.js +83 -0
  86. package/v2Containers/Viber/index.js +5 -0
  87. package/v2Containers/WebPush/Create/hooks/useTagManagement.js +0 -2
  88. package/v2Containers/WebPush/Create/index.js +9 -1
  89. package/v2Containers/Whatsapp/index.js +5 -0
  90. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +20 -0
  91. package/v2Containers/Zalo/index.js +2 -0
@@ -645,6 +645,105 @@ describe('UnifiedPreview', () => {
645
645
  expect(screen.getByTestId('rcs-preview')).toBeInTheDocument();
646
646
  expect(screen.getByTestId('rcs-content')).toHaveTextContent(/Only RCS pane/);
647
647
  });
648
+
649
+ it('on SMS fallback tab, shows raw template when no varmap and no resolved text', () => {
650
+ const props = {
651
+ ...defaultProps,
652
+ channel: CHANNELS.RCS,
653
+ content: { rcsTitle: 'Hello RCS' },
654
+ smsFallbackContent: {
655
+ content: 'Hello {{name}}',
656
+ templateContent: 'Hello {{name}}',
657
+ // no rcsSmsFallbackVarMapped
658
+ },
659
+ smsFallbackResolvedText: undefined,
660
+ activePreviewTab: PREVIEW_TAB_SMS_FALLBACK,
661
+ onPreviewTabChange: jest.fn(),
662
+ };
663
+
664
+ render(
665
+ <TestWrapper>
666
+ <ComponentToRender {...props} />
667
+ </TestWrapper>
668
+ );
669
+
670
+ // rawFallbackTemplate is shown directly — {{tags}} remain visible
671
+ expect(screen.getByTestId('sms-content')).toHaveTextContent('Hello {{name}}');
672
+ });
673
+
674
+ it('on SMS fallback tab, treats empty resolved text as absent and shows raw template', () => {
675
+ const props = {
676
+ ...defaultProps,
677
+ channel: CHANNELS.RCS,
678
+ content: { rcsTitle: 'Hello RCS' },
679
+ smsFallbackContent: {
680
+ content: 'Raw {{var}} template',
681
+ templateContent: 'Raw {{var}} template',
682
+ },
683
+ smsFallbackResolvedText: '',
684
+ activePreviewTab: PREVIEW_TAB_SMS_FALLBACK,
685
+ onPreviewTabChange: jest.fn(),
686
+ };
687
+
688
+ render(
689
+ <TestWrapper>
690
+ <ComponentToRender {...props} />
691
+ </TestWrapper>
692
+ );
693
+
694
+ expect(screen.getByTestId('sms-content')).toHaveTextContent('Raw {{var}} template');
695
+ });
696
+
697
+ it('on SMS fallback tab, applies varmap slot substitution when varmap entries exist and no resolved text', () => {
698
+ // getFallbackResolvedContent key format: `${fullToken}_${segmentIndex}`
699
+ // 'Hello {{name}}' → segments ['Hello ', '{{name}}'], so {{name}} is at index 1 → key '{{name}}_1'
700
+ const props = {
701
+ ...defaultProps,
702
+ channel: CHANNELS.RCS,
703
+ content: { rcsTitle: 'Hello RCS' },
704
+ smsFallbackContent: {
705
+ content: 'Hello {{name}}',
706
+ templateContent: 'Hello {{name}}',
707
+ rcsSmsFallbackVarMapped: { '{{name}}_1': 'World' },
708
+ },
709
+ smsFallbackResolvedText: undefined,
710
+ activePreviewTab: PREVIEW_TAB_SMS_FALLBACK,
711
+ onPreviewTabChange: jest.fn(),
712
+ };
713
+
714
+ render(
715
+ <TestWrapper>
716
+ <ComponentToRender {...props} />
717
+ </TestWrapper>
718
+ );
719
+
720
+ expect(screen.getByTestId('sms-content')).toHaveTextContent('Hello World');
721
+ });
722
+
723
+ it('on SMS fallback tab, resolved text takes priority over varmap entries', () => {
724
+ const props = {
725
+ ...defaultProps,
726
+ channel: CHANNELS.RCS,
727
+ content: { rcsTitle: 'Hello RCS' },
728
+ smsFallbackContent: {
729
+ content: 'Hello {{name}}',
730
+ templateContent: 'Hello {{name}}',
731
+ rcsSmsFallbackVarMapped: { '{{name}}_1': 'World' },
732
+ },
733
+ smsFallbackResolvedText: 'Hello John',
734
+ activePreviewTab: PREVIEW_TAB_SMS_FALLBACK,
735
+ onPreviewTabChange: jest.fn(),
736
+ };
737
+
738
+ render(
739
+ <TestWrapper>
740
+ <ComponentToRender {...props} />
741
+ </TestWrapper>
742
+ );
743
+
744
+ // resolvedText wins over varmap substitution
745
+ expect(screen.getByTestId('sms-content')).toHaveTextContent('Hello John');
746
+ });
648
747
  });
649
748
  });
650
749
 
@@ -30,23 +30,28 @@ jest.mock('@capillarytech/cap-ui-library/CapNotification', () => ({
30
30
  }));
31
31
 
32
32
  // Mock child components - must use React.createElement to avoid hoisting issues
33
+ let lastLeftPanelContentProps = null;
33
34
  jest.mock('../LeftPanelContent', () => {
34
35
  // eslint-disable-next-line global-require, import/no-extraneous-dependencies
35
36
  const ReactLib = require('react');
36
37
  return {
37
38
  __esModule: true,
38
- default: function MockLeftPanelContent() {
39
- return ReactLib.createElement('div', { 'data-testid': 'left-panel' }, 'Left Panel');
39
+ default: function MockLeftPanelContent(props) {
40
+ lastLeftPanelContentProps = props;
41
+ const editorEl = props.renderCustomValuesEditor ? props.renderCustomValuesEditor() : null;
42
+ return ReactLib.createElement('div', { 'data-testid': 'left-panel' }, 'Left Panel', editorEl);
40
43
  },
41
44
  };
42
45
  });
43
46
 
47
+ let lastCustomValuesEditorProps = null;
44
48
  jest.mock('../CustomValuesEditor', () => {
45
49
  // eslint-disable-next-line global-require, import/no-extraneous-dependencies
46
50
  const ReactLib = require('react');
47
51
  return {
48
52
  __esModule: true,
49
- default: function MockCustomValuesEditor() {
53
+ default: function MockCustomValuesEditor(props) {
54
+ lastCustomValuesEditorProps = props;
50
55
  return ReactLib.createElement('div', { 'data-testid': 'custom-values-editor' }, 'Custom Values Editor');
51
56
  },
52
57
  };
@@ -184,6 +189,8 @@ describe('CommonTestAndPreview', () => {
184
189
  beforeEach(() => {
185
190
  jest.clearAllMocks();
186
191
  lastSendTestMessageProps = null;
192
+ lastLeftPanelContentProps = null;
193
+ lastCustomValuesEditorProps = null;
187
194
  // Reset all mock function implementations
188
195
  Object.values(mockActions).forEach((mockFn) => {
189
196
  if (jest.isMockFunction(mockFn)) {
@@ -3263,4 +3270,107 @@ describe('CommonTestAndPreview', () => {
3263
3270
  });
3264
3271
  });
3265
3272
  });
3273
+
3274
+ describe('SMS DLT and mustache tag discrimination (smsTemplateHasMustacheTags / buildSyntheticSmsMustacheTags)', () => {
3275
+ it('should return no tags for SMS content that contains only DLT {#var#} tokens', async () => {
3276
+ render(
3277
+ <TestWrapper>
3278
+ <CommonTestAndPreview
3279
+ {...defaultProps}
3280
+ channel={CHANNELS.SMS}
3281
+ formData={{ 0: { 'sms-editor': 'Order {#orderId#} is confirmed' } }}
3282
+ extractedTags={[]}
3283
+ />
3284
+ </TestWrapper>
3285
+ );
3286
+
3287
+ await waitFor(() => expect(lastLeftPanelContentProps).not.toBeNull());
3288
+
3289
+ // smsTemplateHasMustacheTags returns false for DLT-only → extractedTags is []
3290
+ expect(lastLeftPanelContentProps.extractedTags).toEqual([]);
3291
+ });
3292
+
3293
+ it('should build synthetic tags from {{mustache}} tokens, excluding DLT {#var#} tokens', async () => {
3294
+ render(
3295
+ <TestWrapper>
3296
+ <CommonTestAndPreview
3297
+ {...defaultProps}
3298
+ channel={CHANNELS.SMS}
3299
+ formData={{ 0: { 'sms-editor': 'Hi {{name}}, order {#orderId#} shipped' } }}
3300
+ extractedTags={[]}
3301
+ />
3302
+ </TestWrapper>
3303
+ );
3304
+
3305
+ await waitFor(() => expect(lastLeftPanelContentProps).not.toBeNull());
3306
+
3307
+ const tags = lastLeftPanelContentProps.extractedTags;
3308
+ // Only {{name}} should become a tag — {#orderId#} must be excluded
3309
+ expect(tags).toHaveLength(1);
3310
+ expect(tags[0].name).toBe('name');
3311
+ });
3312
+
3313
+ it('should use API-extracted tags when present instead of building synthetic ones', async () => {
3314
+ const apiTags = [{ name: 'firstName', metaData: { userDriven: true }, children: [] }];
3315
+ render(
3316
+ <TestWrapper>
3317
+ <CommonTestAndPreview
3318
+ {...defaultProps}
3319
+ channel={CHANNELS.SMS}
3320
+ formData={{ 0: { 'sms-editor': 'Hi {{firstName}}' } }}
3321
+ extractedTags={apiTags}
3322
+ />
3323
+ </TestWrapper>
3324
+ );
3325
+
3326
+ await waitFor(() => expect(lastLeftPanelContentProps).not.toBeNull());
3327
+
3328
+ // API tags take priority over buildSyntheticSmsMustacheTags
3329
+ expect(lastLeftPanelContentProps.extractedTags).toEqual(apiTags);
3330
+ });
3331
+ });
3332
+
3333
+ describe('handleDiscardCustomValues — preview reset', () => {
3334
+ it('should call updatePreviewRequested when handleDiscardCustomValues is invoked', async () => {
3335
+ render(
3336
+ <TestWrapper>
3337
+ <CommonTestAndPreview
3338
+ {...defaultProps}
3339
+ channel={CHANNELS.SMS}
3340
+ formData={{ 0: { 'sms-editor': 'Hi {{name}}' } }}
3341
+ />
3342
+ </TestWrapper>
3343
+ );
3344
+
3345
+ await waitFor(() => expect(lastCustomValuesEditorProps).not.toBeNull());
3346
+
3347
+ lastCustomValuesEditorProps.handleDiscardCustomValues();
3348
+
3349
+ expect(mockActions.updatePreviewRequested).toHaveBeenCalledTimes(1);
3350
+ });
3351
+
3352
+ it('should call updatePreviewRequested with RCS channel when handleDiscardCustomValues is invoked for RCS with fallback', async () => {
3353
+ render(
3354
+ <TestWrapper>
3355
+ <CommonTestAndPreview
3356
+ {...defaultProps}
3357
+ channel={CHANNELS.RCS}
3358
+ smsFallbackContent={{
3359
+ templateContent: 'Fallback {{name}}',
3360
+ content: 'Fallback {{name}}',
3361
+ }}
3362
+ formData={{}}
3363
+ />
3364
+ </TestWrapper>
3365
+ );
3366
+
3367
+ await waitFor(() => expect(lastCustomValuesEditorProps).not.toBeNull());
3368
+
3369
+ lastCustomValuesEditorProps.handleDiscardCustomValues();
3370
+
3371
+ // updatePreviewRequested is called; syncSmsFallbackPreview (which hits Api directly) is NOT called
3372
+ expect(mockActions.updatePreviewRequested).toHaveBeenCalledTimes(1);
3373
+ });
3374
+ });
3266
3375
  });
3376
+
@@ -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
  getPopupContainer={this.props.tagListGetPopupContainer}
3662
3665
  popoverOverlayStyle={this.props.tagListPopoverOverlayStyle}
3663
3666
  popoverOverlayClassName={this.props.tagListPopoverOverlayClassName}
@@ -3707,6 +3710,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
3707
3710
  userLocale={this.state.translationLang}
3708
3711
  selectedOfferDetails={this.props.selectedOfferDetails}
3709
3712
  eventContextTags={this.props?.eventContextTags}
3713
+ waitEventContextTags={this.props?.waitEventContextTags}
3710
3714
  moduleFilterEnabled={moduleFilterEnabledForCapTagList}
3711
3715
  containerStyle={val.style || {}}
3712
3716
  inputProps={val.inputProps || {}}
@@ -4001,6 +4005,7 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
4001
4005
  onContextChange={this.props.onContextChange}
4002
4006
  moduleFilterEnabled={isModuleFilterEnabled}
4003
4007
  eventContextTags={this.props?.eventContextTags}
4008
+ waitEventContextTags={this.props?.waitEventContextTags}
4004
4009
  />
4005
4010
  </CapColumn>
4006
4011
  );
@@ -4303,6 +4308,7 @@ FormBuilder.defaultProps = {
4303
4308
  userLocale: localStorage.getItem('jlocale') || 'en',
4304
4309
  showLiquidErrorInFooter: () => {},
4305
4310
  metaDataStatus: "",
4311
+ waitEventContextTags: {},
4306
4312
  isTestAndPreviewMode: false, // Default to false to maintain existing behavior
4307
4313
  };
4308
4314
 
@@ -4353,6 +4359,7 @@ FormBuilder.propTypes = {
4353
4359
  moduleType: PropTypes.string.isRequired,
4354
4360
  showLiquidErrorInFooter: PropTypes.func.isRequired,
4355
4361
  eventContextTags: PropTypes.array.isRequired,
4362
+ waitEventContextTags: PropTypes.object,
4356
4363
  forwardedTags: PropTypes.object.isRequired,
4357
4364
  isLoyaltyModule: PropTypes.bool.isRequired,
4358
4365
  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) gates Done/Update/Preview/Test
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',
@@ -225,6 +225,7 @@ const defaultProps = {
225
225
  injectedTags: {},
226
226
  location: { query: {} },
227
227
  eventContextTags: [],
228
+ waitEventContextTags: {},
228
229
  selectedOfferDetails: [],
229
230
  channel: 'EMAIL',
230
231
  userLocale: 'en',