@capillarytech/creatives-library 9.0.56-alpha.7 → 9.0.56-betaa.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 (82) hide show
  1. package/constants/unified.js +4 -2
  2. package/package.json +1 -1
  3. package/services/api.js +0 -20
  4. package/utils/common.js +12 -0
  5. package/utils/templateVarUtils.js +0 -16
  6. package/utils/tests/templateVarUtils.test.js +0 -44
  7. package/v2Components/CommonTestAndPreview/UnifiedPreview/index.js +0 -13
  8. package/v2Components/CommonTestAndPreview/actions.js +0 -13
  9. package/v2Components/CommonTestAndPreview/constants.js +0 -8
  10. package/v2Components/CommonTestAndPreview/index.js +3 -55
  11. package/v2Components/CommonTestAndPreview/reducer.js +0 -20
  12. package/v2Components/CommonTestAndPreview/sagas.js +0 -28
  13. package/v2Components/CommonTestAndPreview/selectors.js +0 -6
  14. package/v2Components/CommonTestAndPreview/tests/UnifiedPreview/index.test.js +0 -106
  15. package/v2Components/CommonTestAndPreview/tests/actions.test.js +0 -15
  16. package/v2Components/CommonTestAndPreview/tests/constants.test.js +1 -9
  17. package/v2Components/CommonTestAndPreview/tests/index.test.js +0 -101
  18. package/v2Components/CommonTestAndPreview/tests/reducer.test.js +0 -41
  19. package/v2Components/CommonTestAndPreview/tests/sagas.test.js +0 -84
  20. package/v2Components/CommonTestAndPreview/tests/selectors.test.js +0 -12
  21. package/v2Components/FormBuilder/Functional/FormBuilderShell.js +320 -46
  22. package/v2Components/FormBuilder/Functional/channels/mobilepush/buildSubmitPayload.js +10 -0
  23. package/v2Components/FormBuilder/Functional/channels/mobilepush/config.js +82 -0
  24. package/v2Components/FormBuilder/Functional/channels/mobilepush/getEditorErrorDescriptor.js +74 -0
  25. package/v2Components/FormBuilder/Functional/channels/mobilepush/index.js +28 -0
  26. package/v2Components/FormBuilder/Functional/channels/mobilepush/modals.js +19 -0
  27. package/v2Components/FormBuilder/Functional/channels/mobilepush/runSubmitPipeline.js +45 -0
  28. package/v2Components/FormBuilder/Functional/channels/mobilepush/tests/getEditorErrorDescriptor.test.js +162 -0
  29. package/v2Components/FormBuilder/Functional/channels/mobilepush/tests/modals.test.js +37 -0
  30. package/v2Components/FormBuilder/Functional/channels/mobilepush/tests/runSubmitPipeline.test.js +70 -0
  31. package/v2Components/FormBuilder/Functional/channels/mobilepush/tests/validate.test.js +274 -0
  32. package/v2Components/FormBuilder/Functional/channels/mobilepush/validate.js +251 -0
  33. package/v2Components/FormBuilder/Functional/channels/registry.js +2 -0
  34. package/v2Components/FormBuilder/Functional/constants.js +43 -8
  35. package/v2Components/FormBuilder/Functional/core/schema/initializeFormState.js +175 -28
  36. package/v2Components/FormBuilder/Functional/core/store/formReducer.js +75 -6
  37. package/v2Components/FormBuilder/Functional/core/store/toLegacyFormData.js +10 -20
  38. package/v2Components/FormBuilder/Functional/layout/FieldSlot.js +9 -1
  39. package/v2Components/FormBuilder/Functional/layout/SchemaForm.js +20 -3
  40. package/v2Components/FormBuilder/Functional/layout/Section.js +6 -1
  41. package/v2Components/FormBuilder/Functional/layout/TabsContainer.js +89 -0
  42. package/v2Components/FormBuilder/Functional/renderers/mpushRenderers.js +440 -0
  43. package/v2Components/FormBuilder/Functional/tests/fieldSlot.test.js +9 -2
  44. package/v2Components/FormBuilder/Functional/tests/mpush.crossFlowParity.test.js +430 -0
  45. package/v2Components/FormBuilder/Functional/tests/mpush.ctaFlows.parity.test.js +282 -0
  46. package/v2Components/FormBuilder/Functional/tests/mpush.editContainer.parity.test.js +141 -0
  47. package/v2Components/FormBuilder/Functional/tests/mpush.engine.test.js +306 -0
  48. package/v2Components/FormBuilder/Functional/tests/mpush.shellEvents.test.js +151 -0
  49. package/v2Components/FormBuilder/Functional/tests/mpushRenderers.test.js +342 -0
  50. package/v2Components/FormBuilder/Functional/tests/schemaForm.test.js +17 -0
  51. package/v2Components/FormBuilder/Functional/tests/tabsContainer.test.js +110 -0
  52. package/v2Components/FormBuilder/index.js +34 -12
  53. package/v2Components/FormBuilder/tests/entryGate.test.js +94 -7
  54. package/v2Components/FormBuilder/tests/mpush.characterization.test.js +459 -0
  55. package/v2Components/TestAndPreviewSlidebox/index.js +0 -9
  56. package/v2Containers/CommunicationFlow/CommunicationFlow.js +75 -140
  57. package/v2Containers/CommunicationFlow/CommunicationFlow.scss +2 -18
  58. package/v2Containers/CommunicationFlow/CommunicationFlowCard.js +27 -58
  59. package/v2Containers/CommunicationFlow/Tests/CommunicationFlow.test.js +51 -503
  60. package/v2Containers/CommunicationFlow/Tests/CommunicationFlowCard.test.js +4 -40
  61. package/v2Containers/CommunicationFlow/constants.js +4 -65
  62. package/v2Containers/CommunicationFlow/index.js +23 -16
  63. package/v2Containers/CommunicationFlow/messages.js +3 -11
  64. package/v2Containers/CommunicationFlow/steps/ChannelSelectionStep/ChannelSelectionStep.js +11 -24
  65. package/v2Containers/CommunicationFlow/steps/ChannelSelectionStep/ChannelSelectionStep.scss +0 -4
  66. package/v2Containers/CommunicationFlow/steps/ChannelSelectionStep/Tests/ChannelSelectionStep.test.js +4 -176
  67. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/DeliverySettingsSection.js +0 -3
  68. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/SenderDetails.js +0 -6
  69. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/Tests/SenderDetails.test.js +0 -25
  70. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/Tests/deliverySettingsConfig.test.js +4 -11
  71. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/deliverySettingsConfig.js +5 -19
  72. package/v2Containers/CreativesContainer/index.js +3 -2
  73. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +5 -5
  74. package/v2Containers/CreativesContainer/tests/index.test.js +0 -12
  75. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +19 -115
  76. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +3 -27
  77. package/v2Containers/WebPush/Create/preview/WebPushPreview.js +12 -17
  78. package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +0 -5
  79. package/v2Containers/Whatsapp/index.js +3 -6
  80. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +34 -306
  81. package/v2Containers/mockdata.js +0 -25
  82. package/v2Containers/CommunicationFlow/Tests/constants.test.js +0 -85
@@ -83,7 +83,6 @@ const ENTITIES = {
83
83
  emailTwoDomains: {
84
84
  EMAIL: [
85
85
  {
86
- id: 'gwmap-a',
87
86
  domainProperties: {
88
87
  id: 'em-a',
89
88
  domainName: 'Mail Alpha',
@@ -102,7 +101,6 @@ const ENTITIES = {
102
101
  },
103
102
  },
104
103
  {
105
- id: 'gwmap-b',
106
104
  domainProperties: {
107
105
  id: 'em-b',
108
106
  domainName: 'Mail Beta',
@@ -324,29 +322,6 @@ describe('SenderDetails', () => {
324
322
  });
325
323
  });
326
324
 
327
- it('persists emailDomainGatewayMapId derived from the selected email domain on save', async () => {
328
- const { onSave } = renderSenderDetails({
329
- channels: ['EMAIL'],
330
- preloadedDomainProperties: ENTITIES.emailTwoDomains,
331
- });
332
- const root = document.querySelector('.sender-details');
333
- await waitFor(() => expect(within(root).getByText('Mail Alpha')).toBeInTheDocument());
334
-
335
- await openSelectAndChoose(root, 0, 'Mail Beta');
336
- await waitFor(() => expect(within(root).getByText('beta@other.com')).toBeInTheDocument());
337
-
338
- const saveBtn = within(root).getByRole('button', { name: /save changes/i });
339
- await waitFor(() => expect(saveBtn).not.toBeDisabled());
340
- fireEvent.click(saveBtn);
341
-
342
- expect(onSave).toHaveBeenCalledWith(
343
- expect.objectContaining({
344
- emailDomain: 'em-b',
345
- emailDomainGatewayMapId: 'gwmap-b',
346
- }),
347
- );
348
- });
349
-
350
325
  it('resets email domain row back to the first gateway', async () => {
351
326
  renderSenderDetails({
352
327
  channels: ['EMAIL'],
@@ -438,7 +438,6 @@ describe('deliverySettingsConfig — user-facing flows', () => {
438
438
  smsDomain: 'd1',
439
439
  smsSenderId: 'g1',
440
440
  emailDomain: 'ed',
441
- emailDomainGatewayMapId: 'gwmap-1',
442
441
  emailSenderId: 'mail@x.com',
443
442
  emailSenderName: 'N',
444
443
  emailReplyToId: 'r@x.com',
@@ -456,10 +455,9 @@ describe('deliverySettingsConfig — user-facing flows', () => {
456
455
  SMS: { domainId: 'd1', gsmSenderId: 'g1' },
457
456
  EMAIL: {
458
457
  domainId: 'ed',
459
- domainGatewayMapId: 'gwmap-1',
460
- senderId: 'mail@x.com',
458
+ senderEmail: 'mail@x.com',
461
459
  senderLabel: 'N',
462
- replyToId: 'r@x.com',
460
+ senderReplyTo: 'r@x.com',
463
461
  },
464
462
  WHATSAPP: { domainId: 'wd', senderMobNum: '+w' },
465
463
  RCS: { senderMobNum: '+r', rcsSender: '+r' },
@@ -474,10 +472,9 @@ describe('deliverySettingsConfig — user-facing flows', () => {
474
472
  SMS: { domainId: 'd', gsmSenderId: 'g' },
475
473
  EMAIL: {
476
474
  domainId: 'ed',
477
- domainGatewayMapId: 'gwmap-2',
478
- senderId: 'e@e.com',
475
+ senderEmail: 'e@e.com',
479
476
  senderLabel: 'L',
480
- replyToId: 'r@e.com',
477
+ senderReplyTo: 'r@e.com',
481
478
  },
482
479
  WHATSAPP: { senderMobNum: '+w', domainId: 'wid' },
483
480
  RCS: { rcsSender: '+r' },
@@ -489,10 +486,6 @@ describe('deliverySettingsConfig — user-facing flows', () => {
489
486
  smsDomain: 'd',
490
487
  smsSenderId: 'g',
491
488
  emailDomain: 'ed',
492
- emailDomainGatewayMapId: 'gwmap-2',
493
- emailSenderId: 'e@e.com',
494
- emailSenderName: 'L',
495
- emailReplyToId: 'r@e.com',
496
489
  whatsappDomainId: 'wid',
497
490
  viberSenderId: 'vx',
498
491
  });
@@ -181,12 +181,6 @@ const getEmailDomainValue = (entity) => {
181
181
  return emailData.domainProperties?.id ?? emailData.domainId ?? emailData.id ?? '';
182
182
  };
183
183
 
184
- // CCS domainGatewayMapId is the domainProperties API's outer id, not domainProperties.id; it identifies the selected domain's gateway mapping.
185
- const getEmailDomainGatewayMapIdByDomainId = (entity, domainId) => {
186
- const domainEntry = getEmailDomainById(entity, domainId);
187
- return domainEntry?.id ?? '';
188
- };
189
-
190
184
  /** Domain name for summary display (parseEntityForDisplay) */
191
185
  const getEmailDomainNameForDisplay = (entity) => {
192
186
  const emailData = getEmailData(entity);
@@ -268,8 +262,6 @@ const getEmailDefaultsForDomain = (domainData) => {
268
262
  * context.fieldValues has current form state (e.g. selected emailDomain)
269
263
  * Aligned with adiona-ui/cap-campaigns-v2: default = contactInfo item with default:true, or first
270
264
  */
271
- export { getEmailDomainGatewayMapIdByDomainId };
272
-
273
265
  export const getDefaultValueForField = (fieldKey, entity, context = {}) => {
274
266
  if (!entity) return '';
275
267
  const fieldValues = context?.fieldValues || {};
@@ -582,10 +574,7 @@ export const parseEntityForDisplay = (entity, context = {}) => {
582
574
  senderDetails: entity,
583
575
  smsSenderId: getSmsSenderIdValue(entity),
584
576
  smsDomain: getSmsDomainValue(entity),
585
- // emailDomain is the display-only domain name; buildChannelSettingFromFieldValues needs the numeric domainId/domainGatewayMapId sourced separately.
586
577
  emailDomain: getEmailDomainNameForDisplay(entity),
587
- emailDomainId: getEmailDomainValue(entity),
588
- emailDomainGatewayMapId: getEmailDomainGatewayMapIdByDomainId(entity, getEmailDomainValue(entity)),
589
578
  emailSenderId: getEmailSenderIdValue(entity),
590
579
  viberSenderId: getSenderIdFromContactInfo(entity, 'VIBER'),
591
580
  zaloSenderId: getSenderIdFromContactInfo(entity, 'ZALO'),
@@ -611,12 +600,10 @@ export const buildChannelSettingFromFieldValues = (fieldValues = {}) => {
611
600
  }
612
601
  if (fieldValues.emailDomain != null || fieldValues.emailSenderId != null || fieldValues.emailSenderName != null || fieldValues.emailReplyToId != null) {
613
602
  channelSetting.EMAIL = {
614
- // Prefer numeric emailDomainId from auto-save defaults; emailDomain may be either a SenderDetails ID or display name.
615
- domainId: fieldValues.emailDomainId ?? fieldValues.emailDomain,
616
- domainGatewayMapId: fieldValues.emailDomainGatewayMapId,
617
- senderId: fieldValues.emailSenderId,
603
+ domainId: fieldValues.emailDomain,
604
+ senderEmail: fieldValues.emailSenderId,
618
605
  senderLabel: fieldValues.emailSenderName,
619
- replyToId: fieldValues.emailReplyToId,
606
+ senderReplyTo: fieldValues.emailReplyToId,
620
607
  };
621
608
  }
622
609
  if (fieldValues.whatsappSenderNumber != null || fieldValues.whatsappAccount != null) {
@@ -686,10 +673,9 @@ export const parseChannelSettingForDisplay = (channelSetting = {}) => {
686
673
  }
687
674
  if (channelSetting.EMAIL) {
688
675
  out.emailDomain = channelSetting.EMAIL.domainId;
689
- out.emailDomainGatewayMapId = channelSetting.EMAIL.domainGatewayMapId;
690
- out.emailSenderId = channelSetting.EMAIL.senderId;
676
+ out.emailSenderId = channelSetting.EMAIL.senderEmail;
691
677
  out.emailSenderName = channelSetting.EMAIL.senderLabel;
692
- out.emailReplyToId = channelSetting.EMAIL.replyToId;
678
+ out.emailReplyToId = channelSetting.EMAIL.senderReplyTo;
693
679
  }
694
680
  if (channelSetting.WHATSAPP) {
695
681
  out.whatsappSenderNumber = channelSetting.WHATSAPP.senderMobNum;
@@ -164,6 +164,7 @@ export class Creatives extends React.Component {
164
164
  isFullMode: props.isFullMode,
165
165
  useLocalTemplates,
166
166
  });
167
+
167
168
  this.state = {
168
169
  isLoadingContent: true,
169
170
  templateStep: 1, //modeSelection: for template name and (for email selecting upload or editor), and createTemplate to create template create based on modeSelection
@@ -412,7 +413,7 @@ export class Creatives extends React.Component {
412
413
  this.setState({ isGetFormData: false });
413
414
  };
414
415
 
415
- mapCarouselDataToCreatives = (cards) => (cards || []).map((card) => {
416
+ mapCarouselDataToCreatives = (cards) => cards.map((card) => {
416
417
  const {
417
418
  cardVarMapped, bodyTemplate, media, buttons, mediaType,
418
419
  } = card || {};
@@ -2461,7 +2462,7 @@ export class Creatives extends React.Component {
2461
2462
  )}
2462
2463
  handleClose={this.handleCloseSlideBox}
2463
2464
  show={showSlideBox}
2464
- size="size-l"
2465
+ size="size-xl"
2465
2466
  />
2466
2467
  </SlideBoxWrapper>
2467
2468
  );
@@ -89,7 +89,7 @@ exports[`Test SlideBoxContent container campaign message, add creative click rcs
89
89
  />
90
90
  }
91
91
  show={true}
92
- size="size-l"
92
+ size="size-xl"
93
93
  />
94
94
  </CreativesSlideBoxWrapper>
95
95
  `;
@@ -183,7 +183,7 @@ exports[`Test SlideBoxContent container campaign message, add creative click wha
183
183
  />
184
184
  }
185
185
  show={true}
186
- size="size-l"
186
+ size="size-xl"
187
187
  />
188
188
  </CreativesSlideBoxWrapper>
189
189
  `;
@@ -320,7 +320,7 @@ exports[`Test SlideBoxContent container campaign message, whatsapp edit all data
320
320
  />
321
321
  }
322
322
  show={false}
323
- size="size-l"
323
+ size="size-xl"
324
324
  />
325
325
  </CreativesSlideBoxWrapper>
326
326
  `;
@@ -457,7 +457,7 @@ exports[`Test SlideBoxContent container campaign message, whatsapp edit min data
457
457
  />
458
458
  }
459
459
  show={false}
460
- size="size-l"
460
+ size="size-xl"
461
461
  />
462
462
  </CreativesSlideBoxWrapper>
463
463
  `;
@@ -594,7 +594,7 @@ exports[`Test SlideBoxContent container it should clear the url, on channel chan
594
594
  />
595
595
  }
596
596
  show={false}
597
- size="size-l"
597
+ size="size-xl"
598
598
  />
599
599
  </CreativesSlideBoxWrapper>
600
600
  `;
@@ -10,7 +10,6 @@ const {
10
10
  whatsappGetCreativeData2,
11
11
  whatsappGetTemplateData1,
12
12
  whatsappGetTemplateData2,
13
- whatsappGetTemplateDataNullCards,
14
13
  rcsTemplates,
15
14
  rcsEditTemplateData,
16
15
  smsEditTemplateData,
@@ -78,17 +77,6 @@ describe('Test SlideBoxContent container', () => {
78
77
  expect(handleCloseCreatives).toHaveBeenCalledWith(true);
79
78
  });
80
79
 
81
- it('does not throw when templateConfigs.cards is explicitly null (regression: CCS sends null rather than omitting the field on non-carousel WhatsApp templates, and mapCarouselDataToCreatives called .map() straight off it)', () => {
82
- expect(() =>
83
- renderFunction(
84
- 'WHATSAPP',
85
- 'editTemplate',
86
- whatsappTemplates,
87
- whatsappGetTemplateDataNullCards,
88
- ),
89
- ).not.toThrow();
90
- });
91
-
92
80
  it('it should clear the url, on channel change from new whatsapp to another', () => {
93
81
  renderFunction(
94
82
  'WHATSAPP',