@capillarytech/creatives-library 8.0.330-alpha.0 → 8.0.331-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 (111) hide show
  1. package/constants/unified.js +0 -18
  2. package/package.json +1 -1
  3. package/services/tests/api.test.js +0 -13
  4. package/utils/commonUtils.js +1 -19
  5. package/v2Components/CapTagList/index.js +0 -10
  6. package/v2Components/CommonTestAndPreview/CustomValuesEditor.js +49 -70
  7. package/v2Components/CommonTestAndPreview/DeliverySettings/DeliverySettings.scss +2 -8
  8. package/v2Components/CommonTestAndPreview/DeliverySettings/ModifyDeliverySettings.js +21 -207
  9. package/v2Components/CommonTestAndPreview/DeliverySettings/constants.js +0 -16
  10. package/v2Components/CommonTestAndPreview/DeliverySettings/index.js +10 -85
  11. package/v2Components/CommonTestAndPreview/DeliverySettings/messages.js +0 -30
  12. package/v2Components/CommonTestAndPreview/DeliverySettings/utils/parseSenderDetailsResponse.js +11 -79
  13. package/v2Components/CommonTestAndPreview/ExistingCustomerModal.js +1 -0
  14. package/v2Components/CommonTestAndPreview/SendTestMessage.js +5 -10
  15. package/v2Components/CommonTestAndPreview/UnifiedPreview/_unifiedPreview.scss +1 -20
  16. package/v2Components/CommonTestAndPreview/UnifiedPreview/index.js +4 -133
  17. package/v2Components/CommonTestAndPreview/_commonTestAndPreview.scss +0 -11
  18. package/v2Components/CommonTestAndPreview/constants.js +2 -38
  19. package/v2Components/CommonTestAndPreview/index.js +176 -672
  20. package/v2Components/CommonTestAndPreview/messages.js +3 -41
  21. package/v2Components/CommonTestAndPreview/reducer.js +3 -1
  22. package/v2Components/CommonTestAndPreview/sagas.js +8 -16
  23. package/v2Components/CommonTestAndPreview/tests/CustomValuesEditor.test.js +284 -308
  24. package/v2Components/CommonTestAndPreview/tests/DeliverySettings/ModifyDeliverySettings.test.js +65 -231
  25. package/v2Components/CommonTestAndPreview/tests/DeliverySettings/index.test.js +5 -118
  26. package/v2Components/CommonTestAndPreview/tests/DeliverySettings/utils/parseSenderDetailsResponse.test.js +0 -341
  27. package/v2Components/CommonTestAndPreview/tests/SendTestMessage.test.js +13 -34
  28. package/v2Components/CommonTestAndPreview/tests/UnifiedPreview/index.test.js +1 -199
  29. package/v2Components/CommonTestAndPreview/tests/index.test.js +4 -132
  30. package/v2Components/CommonTestAndPreview/tests/sagas.test.js +2 -2
  31. package/v2Components/FormBuilder/index.js +1 -7
  32. package/v2Components/TestAndPreviewSlidebox/index.js +1 -13
  33. package/v2Components/TestAndPreviewSlidebox/sagas.js +4 -11
  34. package/v2Components/TestAndPreviewSlidebox/tests/saga.test.js +1 -3
  35. package/v2Containers/CreativesContainer/SlideBoxContent.js +4 -36
  36. package/v2Containers/CreativesContainer/SlideBoxFooter.js +1 -10
  37. package/v2Containers/CreativesContainer/SlideBoxHeader.js +4 -29
  38. package/v2Containers/CreativesContainer/constants.js +0 -9
  39. package/v2Containers/CreativesContainer/index.js +93 -292
  40. package/v2Containers/CreativesContainer/index.scss +1 -51
  41. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +34 -78
  42. package/v2Containers/CreativesContainer/tests/SlideBoxHeader.test.js +16 -79
  43. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +0 -8
  44. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxHeader.test.js.snap +98 -357
  45. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +10 -20
  46. package/v2Containers/CreativesContainer/tests/index.test.js +9 -71
  47. package/v2Containers/Rcs/constants.js +3 -40
  48. package/v2Containers/Rcs/index.js +895 -1145
  49. package/v2Containers/Rcs/index.scss +6 -85
  50. package/v2Containers/Rcs/messages.js +2 -12
  51. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +1432 -40783
  52. package/v2Containers/Rcs/tests/__snapshots__/utils.test.js.snap +5 -0
  53. package/v2Containers/Rcs/tests/index.test.js +38 -41
  54. package/v2Containers/Rcs/tests/mockData.js +0 -38
  55. package/v2Containers/Rcs/tests/utils.test.js +1 -435
  56. package/v2Containers/Rcs/utils.js +10 -405
  57. package/v2Containers/Sms/Create/index.js +38 -100
  58. package/v2Containers/SmsTrai/Create/index.js +4 -9
  59. package/v2Containers/SmsTrai/Edit/constants.js +0 -2
  60. package/v2Containers/SmsTrai/Edit/index.js +128 -636
  61. package/v2Containers/SmsTrai/Edit/messages.js +4 -14
  62. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +2296 -4249
  63. package/v2Containers/SmsWrapper/index.js +8 -37
  64. package/v2Containers/TagList/index.js +11 -21
  65. package/v2Containers/Templates/_templates.scss +2 -63
  66. package/v2Containers/Templates/actions.js +0 -11
  67. package/v2Containers/Templates/constants.js +0 -2
  68. package/v2Containers/Templates/index.js +40 -90
  69. package/v2Containers/Templates/sagas.js +12 -57
  70. package/v2Containers/Templates/tests/__snapshots__/index.test.js.snap +1079 -1043
  71. package/v2Containers/Templates/tests/sagas.test.js +123 -193
  72. package/v2Containers/TemplatesV2/TemplatesV2.style.js +1 -72
  73. package/v2Containers/TemplatesV2/index.js +23 -86
  74. package/v2Containers/WebPush/Create/index.js +1 -1
  75. package/v2Containers/Whatsapp/index.js +20 -3
  76. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +34 -578
  77. package/utils/templateVarUtils.js +0 -201
  78. package/utils/tests/templateVarUtils.test.js +0 -204
  79. package/v2Components/CommonTestAndPreview/previewApiUtils.js +0 -59
  80. package/v2Components/CommonTestAndPreview/tests/previewApiUtils.test.js +0 -67
  81. package/v2Components/SmsFallback/SmsFallbackLocalSelector.js +0 -87
  82. package/v2Components/SmsFallback/constants.js +0 -73
  83. package/v2Components/SmsFallback/index.js +0 -955
  84. package/v2Components/SmsFallback/index.scss +0 -265
  85. package/v2Components/SmsFallback/messages.js +0 -78
  86. package/v2Components/SmsFallback/smsFallbackUtils.js +0 -118
  87. package/v2Components/SmsFallback/tests/SmsFallbackLocalSelector.test.js +0 -50
  88. package/v2Components/SmsFallback/tests/rcsSmsFallback.acceptance.test.js +0 -147
  89. package/v2Components/SmsFallback/tests/smsFallbackHandlers.test.js +0 -304
  90. package/v2Components/SmsFallback/tests/smsFallbackUi.test.js +0 -197
  91. package/v2Components/SmsFallback/tests/smsFallbackUtils.test.js +0 -277
  92. package/v2Components/SmsFallback/tests/useLocalTemplateList.test.js +0 -422
  93. package/v2Components/SmsFallback/useLocalTemplateList.js +0 -92
  94. package/v2Components/VarSegmentMessageEditor/constants.js +0 -2
  95. package/v2Components/VarSegmentMessageEditor/index.js +0 -125
  96. package/v2Components/VarSegmentMessageEditor/index.scss +0 -46
  97. package/v2Containers/CreativesContainer/CreativesSlideBoxWrapper.js +0 -43
  98. package/v2Containers/CreativesContainer/embeddedSlideboxUtils.js +0 -67
  99. package/v2Containers/CreativesContainer/tests/SlideBoxContent.localTemplates.test.js +0 -90
  100. package/v2Containers/CreativesContainer/tests/embeddedSlideboxUtils.test.js +0 -258
  101. package/v2Containers/CreativesContainer/tests/useLocalTemplatesProp.test.js +0 -125
  102. package/v2Containers/Rcs/rcsLibraryHydrationUtils.js +0 -225
  103. package/v2Containers/Rcs/tests/rcsLibraryHydrationUtils.test.js +0 -318
  104. package/v2Containers/Sms/smsFormDataHelpers.js +0 -67
  105. package/v2Containers/Sms/tests/smsFormDataHelpers.test.js +0 -253
  106. package/v2Containers/SmsTrai/Edit/index.scss +0 -121
  107. package/v2Containers/Templates/TemplatesActionBar.js +0 -101
  108. package/v2Containers/Templates/tests/TemplatesActionBar.test.js +0 -120
  109. package/v2Containers/Templates/tests/smsTemplatesListApi.test.js +0 -180
  110. package/v2Containers/Templates/utils/smsTemplatesListApi.js +0 -79
  111. package/v2Containers/TemplatesV2/tests/TemplatesV2.localTemplates.test.js +0 -131
@@ -301,6 +301,11 @@ exports[`RCS utils getRCSContent renders RCS content with no media 1`] = `
301
301
  <div
302
302
  className="cap-rcs-creatives"
303
303
  >
304
+ <div
305
+ className="CapLabel-n7zsf5-0 gtGqsG rcs-listing-content title"
306
+ fontWeight="bold"
307
+ type="label19"
308
+ />
304
309
  <div
305
310
  className="CapLabel-n7zsf5-0 ekUKMg rcs-listing-content desc"
306
311
  type="label19"
@@ -15,14 +15,6 @@ import CapActionButton from '../../../v2Components/CapActionButton';
15
15
  import { INITIAL_SUGGESTIONS_DATA_STOP } from '../constants';
16
16
 
17
17
 
18
- jest.mock('react-redux', () => {
19
- const actual = jest.requireActual('react-redux');
20
- return {
21
- ...actual,
22
- useDispatch: jest.fn(() => jest.fn()),
23
- };
24
- });
25
-
26
18
  jest.mock('../../../v2Containers/TagList/index.js', () => ({
27
19
  __esModule: true,
28
20
  default: (props) => (
@@ -150,7 +142,7 @@ const renderHelper = (args) => {
150
142
  isEditFlow={args.isEditFlow || false}
151
143
  loadingTags={false}
152
144
  metaEntities={[]}
153
- {...(args.omitGetDefaultTags ? {} : { getDefaultTags: true })}
145
+ getDefaultTags
154
146
  isDltEnabled={args.isDltEnabled || false}
155
147
  smsRegister={'DLT'}
156
148
  />
@@ -453,8 +445,8 @@ describe('Creatives rcs test/>', () => {
453
445
  });
454
446
 
455
447
  it('should call fetchSchemaForEntity when TagList context changes (non-full mode)', () => {
456
- // omitGetDefaultTags: when getDefaultTags is true it overwrites query.context and blocks context switches
457
- renderHelper({ isFullMode: false, omitGetDefaultTags: true });
448
+ // Re-render in non-full mode so TagList is visible
449
+ renderHelper({ isFullMode: false });
458
450
  const tagList = renderedComponent.find('.tag-mock').at(0);
459
451
  expect(tagList.exists()).toBe(true);
460
452
  const before = fetchSchemaForEntity.mock.calls.length;
@@ -462,7 +454,7 @@ describe('Creatives rcs test/>', () => {
462
454
  tagList.prop('onContextChange')('ALL');
463
455
  });
464
456
  const after = fetchSchemaForEntity.mock.calls.length;
465
- expect(after).toBeGreaterThan(before);
457
+ expect(after).toBe(before + 1);
466
458
  const lastArg = fetchSchemaForEntity.mock.calls[after - 1][0];
467
459
  expect(lastArg).toEqual(expect.objectContaining({ layout: 'SMS', type: 'TAG', context: 'default' }));
468
460
  });
@@ -638,16 +630,15 @@ describe('RCS createPayload', () => {
638
630
  expect(payloadArg.versions.base.content.RCS.rcsContent.accessToken).toBe('secret-token');
639
631
  expect(payloadArg.versions.base.content.RCS.rcsContent.hostName).toBe('rcs.host.example.com');
640
632
  expect(payloadArg.versions.base.content.RCS.rcsContent.accountName).toBe('Brand RCS Account');
641
- // templateType effect (text_message → rich_card) can reset selectedDimension after hydration on first mount;
642
- // payload cardSettings follow `selectedDimension` state (see Rcs createPayload).
643
633
  expect(payloadArg.versions.base.content.RCS.rcsContent.cardSettings).toEqual(
644
- expect.objectContaining({ cardOrientation: 'VERTICAL', cardWidth: 'SMALL' }),
634
+ expect.objectContaining({ cardOrientation: 'HORIZONTAL', mediaAlignment: 'LEFT', cardWidth: 'SMALL' }),
645
635
  );
646
- // First-mount templateType effect vs hydration can leave templateMediaType as NONE; payload follows state.
647
- expect(card.mediaType).toBe('NONE');
648
- // SMS fallback is only included when smsFallbackData is set (SmsFallback), not an empty stub
649
- expect(payloadArg.versions.base.content.RCS.smsFallBackContent).toBeUndefined();
650
- }, 30000);
636
+ expect(card.mediaType).toBe('IMAGE');
637
+ expect(card.media).toEqual(expect.objectContaining({ mediaUrl: 'https://cdn.example.com/img.png' }));
638
+ expect(payloadArg.versions.base.content.RCS.smsFallBackContent).toEqual(
639
+ expect.objectContaining({ message: '' }),
640
+ );
641
+ });
651
642
 
652
643
  it('should include empty account metadata when no account is selected', async () => {
653
644
  const createRcsTemplate = jest.fn();
@@ -713,7 +704,7 @@ describe('RCS createPayload', () => {
713
704
  expect(rcsContent.accountName).toBe('');
714
705
  });
715
706
 
716
- it('does not add smsFallBackContent until SmsFallback data is set (isDltEnabled is not wired on Rcs)', async () => {
707
+ it('should attach DLT template configs when enabled', async () => {
717
708
  const createRcsTemplate = jest.fn();
718
709
  const getFormData = jest.fn();
719
710
  const { createPayloadFullMode } = mockData;
@@ -766,7 +757,16 @@ describe('RCS createPayload', () => {
766
757
  createRcsTemplate.mock.calls[0]?.[0] ||
767
758
  getFormData.mock.calls[0]?.[0]?.value;
768
759
  expect(payloadArg).toBeDefined();
769
- expect(payloadArg.versions.base.content.RCS.smsFallBackContent).toBeUndefined();
760
+ expect(payloadArg.versions.base.content.RCS.smsFallBackContent).toEqual(
761
+ expect.objectContaining({
762
+ templateConfigs: expect.objectContaining({
763
+ templateId: '',
764
+ templateName: '',
765
+ template: '',
766
+ registeredSenderIds: [],
767
+ }),
768
+ }),
769
+ );
770
770
  });
771
771
 
772
772
  it('should build expected payload in non-full mode (VIDEO, vertical medium)', () => {
@@ -818,7 +818,7 @@ describe('RCS createPayload', () => {
818
818
  expect(payloadArg.type).toBe('RCS');
819
819
  expect(payloadArg.versions.base.content.RCS.rcsContent.contentType).toBe('RICHCARD');
820
820
  expect(payloadArg.versions.base.content.RCS.rcsContent.cardSettings).toEqual(
821
- expect.objectContaining({ cardOrientation: 'VERTICAL', cardWidth: 'MEDIUM' }),
821
+ expect.objectContaining({ cardOrientation: 'VERTICAL', cardWidth: 'SMALL' }),
822
822
  );
823
823
  expect(card.mediaType).toBe('VIDEO');
824
824
  expect(card.media).toEqual(
@@ -843,9 +843,7 @@ describe('RCS createPayload', () => {
843
843
  // same placeholder appears twice
844
844
  title: 'Hello {{user_name}} and {{user_name}}',
845
845
  description: 'Hi {{user_name}}',
846
- // Rich card so title VarSegment row mounts (NONE → text_message hides title slots)
847
- mediaType: 'IMAGE',
848
- media: { mediaUrl: 'https://cdn.example.com/card.png' },
846
+ mediaType: 'NONE',
849
847
  cardVarMapped: {}, // empty on load
850
848
  suggestions: [],
851
849
  },
@@ -913,8 +911,6 @@ describe('RCS createPayload', () => {
913
911
  });
914
912
 
915
913
  it('should insert TagList label into focused placeholder and sync duplicates in non-full mode', () => {
916
- // One title slot so numeric slot key + semantic user_name stay aligned (duplicate {{user_name}} would
917
- // leave other slots on empty "2","3",… keys from hydration).
918
914
  const templateData = {
919
915
  name: 'DupVarsTemplate2',
920
916
  versions: {
@@ -926,11 +922,9 @@ describe('RCS createPayload', () => {
926
922
  cardSettings: { cardOrientation: 'VERTICAL', cardWidth: 'SMALL' },
927
923
  cardContent: [
928
924
  {
929
- title: 'Hello {{user_name}}',
930
- description: 'Hi',
931
- // Rich card so title VarSegment mounts (NONE → text_message hides title row)
932
- mediaType: 'IMAGE',
933
- media: { mediaUrl: 'https://cdn.example.com/card.png' },
925
+ title: 'Hello {{user_name}} and {{user_name}}',
926
+ description: 'Hi {{user_name}}',
927
+ mediaType: 'NONE',
934
928
  cardVarMapped: {},
935
929
  suggestions: [],
936
930
  },
@@ -978,12 +972,12 @@ describe('RCS createPayload', () => {
978
972
  const id = n.prop('id') || '';
979
973
  return id.includes('{{user_name}}_');
980
974
  });
981
- expect(titleVarAreas.length).toBeGreaterThanOrEqual(1);
975
+ expect(titleVarAreas.length).toBeGreaterThanOrEqual(2);
982
976
 
983
- // VarSegmentMessageEditor calls onFocus(id) with the slot id string (not a DOM event)
977
+ // Focus the first variable textarea so TagList knows where to insert
984
978
  act(() => {
985
979
  const id = titleVarAreas.at(0).prop('id');
986
- titleVarAreas.at(0).props().onFocus(id);
980
+ titleVarAreas.at(0).props().onFocus({ target: { id } });
987
981
  });
988
982
  wrapper.update();
989
983
 
@@ -999,6 +993,7 @@ describe('RCS createPayload', () => {
999
993
  return id.includes('{{user_name}}_');
1000
994
  });
1001
995
  expect(updatedTitleVarAreas.at(0).prop('value')).toBe('{{first_name}}');
996
+ expect(updatedTitleVarAreas.at(1).prop('value')).toBe('{{first_name}}');
1002
997
  });
1003
998
 
1004
999
  it('should keep two tags + freetext inside the variable textarea in non-full mode edit (not merged into static text)', () => {
@@ -1066,11 +1061,13 @@ describe('RCS createPayload', () => {
1066
1061
 
1067
1062
  wrapper.update();
1068
1063
 
1069
- // At least one variable slot is rendered (ids like `{{token}}_0`)
1070
- const varSlotAreas = wrapper.find('TextArea').filterWhere((n) =>
1071
- /\{\{[^}]+\}}_\d+/.test(String(n.prop('id') || '')),
1072
- );
1073
- expect(varSlotAreas.length).toBeGreaterThan(0);
1064
+ // The placeholder {{service_type}} should exist as a variable textarea id, and its value should be the mixed string.
1065
+ const serviceTypeAreas = wrapper.find('TextArea').filterWhere((n) => {
1066
+ const id = n.prop('id') || '';
1067
+ return id.includes('{{service_type}}_');
1068
+ });
1069
+ expect(serviceTypeAreas.length).toBeGreaterThanOrEqual(1);
1070
+ expect(serviceTypeAreas.at(0).prop('value')).toBe('{{first_name}}{{adv}}freeText');
1074
1071
 
1075
1072
  // Ensure freetext does NOT leak into static text blocks.
1076
1073
  const staticAreas = wrapper.find('TextArea').filterWhere((n) => !!n.prop('disabled'));
@@ -148,7 +148,6 @@ export const mockData = {
148
148
  },
149
149
  accountData: {
150
150
  selectedRcsAccount: {
151
- id: 'we-crm-account-id-42',
152
151
  sourceAccountIdentifier: 'rcs-account-123',
153
152
  configs: { accessToken: 'secret-token' },
154
153
  hostName: 'rcs.host.example.com',
@@ -286,41 +285,4 @@ export const mockData = {
286
285
  },
287
286
  },
288
287
  },
289
- // RCS template with SMS fallback for edit-flow tests
290
- rcsTemplateWithSmsFallback: {
291
- templateDetails: {
292
- _id: 'rcs_with_fallback_1',
293
- name: 'RCSWithFallback',
294
- type: 'RCS',
295
- versions: {
296
- base: {
297
- content: {
298
- RCS: {
299
- rcsContent: {
300
- cardSettings: { cardOrientation: 'VERTICAL' },
301
- cardContent: [
302
- {
303
- description: 'RCS description',
304
- mediaType: 'TEXT',
305
- suggestions: [],
306
- },
307
- ],
308
- contentType: 'text_message',
309
- },
310
- smsFallBackContent: {
311
- smsTemplateId: 'sms_fb_001',
312
- smsTemplateName: 'Fallback Template',
313
- smsContent: 'SMS fallback message',
314
- message: 'SMS fallback message',
315
- smsTemplateContent: 'SMS fallback message',
316
- smsVariables: [],
317
- smsVarMapped: {},
318
- smsUnicodeValidity: true,
319
- },
320
- },
321
- },
322
- },
323
- },
324
- },
325
- },
326
288
  };