cap-creatives-ui 8.0.280 → 8.0.321

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 (247) hide show
  1. package/.github/workflows/pr-title-check.yml +88 -0
  2. package/app/constants/unified.js +21 -1
  3. package/app/containers/App/constants.js +0 -1
  4. package/app/containers/Login/test/index.test.js +123 -0
  5. package/app/containers/Login/test/selectors.test.js +165 -0
  6. package/app/initialState.js +0 -2
  7. package/app/services/api.js +6 -0
  8. package/app/services/tests/api.test.js +7 -0
  9. package/app/services/tests/getSchema.test.js +95 -0
  10. package/app/utils/common.js +23 -9
  11. package/app/utils/commonUtils.js +64 -93
  12. package/app/utils/tagValidations.js +83 -219
  13. package/app/utils/templateVarUtils.js +172 -0
  14. package/app/utils/tests/common.test.js +265 -323
  15. package/app/utils/tests/commonUtil.test.js +461 -118
  16. package/app/utils/tests/commonUtils.test.js +581 -0
  17. package/app/utils/tests/messageUtils.test.js +95 -0
  18. package/app/utils/tests/smsCharCount.test.js +304 -0
  19. package/app/utils/tests/smsCharCountV2.test.js +213 -10
  20. package/app/utils/tests/tagValidations.test.js +474 -357
  21. package/app/utils/tests/templateVarUtils.test.js +160 -0
  22. package/app/v2Components/CapDeviceContent/index.js +10 -7
  23. package/app/v2Components/CapTagList/index.js +32 -24
  24. package/app/v2Components/CapTagList/style.scss +48 -0
  25. package/app/v2Components/CapTagListWithInput/__tests__/CapTagListWithInput.test.js +63 -0
  26. package/app/v2Components/CapTagListWithInput/index.js +8 -0
  27. package/app/v2Components/CapWhatsappCTA/index.js +2 -0
  28. package/app/v2Components/CapWhatsappCarouselButton/index.js +32 -14
  29. package/app/v2Components/CapWhatsappCarouselButton/tests/index.test.js +120 -2
  30. package/app/v2Components/CommonTestAndPreview/CustomValuesEditor.js +70 -49
  31. package/app/v2Components/CommonTestAndPreview/DeliverySettings/DeliverySettings.scss +39 -0
  32. package/app/v2Components/CommonTestAndPreview/DeliverySettings/ModifyDeliverySettings.js +606 -0
  33. package/app/v2Components/CommonTestAndPreview/DeliverySettings/ModifyDeliverySettings.scss +36 -0
  34. package/app/v2Components/CommonTestAndPreview/DeliverySettings/constants.js +79 -0
  35. package/app/v2Components/CommonTestAndPreview/DeliverySettings/index.js +314 -0
  36. package/app/v2Components/CommonTestAndPreview/DeliverySettings/messages.js +141 -0
  37. package/app/v2Components/CommonTestAndPreview/DeliverySettings/utils/parseSenderDetailsResponse.js +156 -0
  38. package/app/v2Components/CommonTestAndPreview/SendTestMessage.js +57 -1
  39. package/app/v2Components/CommonTestAndPreview/UnifiedPreview/_unifiedPreview.scss +20 -1
  40. package/app/v2Components/CommonTestAndPreview/UnifiedPreview/index.js +133 -4
  41. package/app/v2Components/CommonTestAndPreview/_commonTestAndPreview.scss +210 -4
  42. package/app/v2Components/CommonTestAndPreview/actions.js +20 -0
  43. package/app/v2Components/CommonTestAndPreview/constants.js +57 -1
  44. package/app/v2Components/CommonTestAndPreview/index.js +878 -156
  45. package/app/v2Components/CommonTestAndPreview/messages.js +41 -3
  46. package/app/v2Components/CommonTestAndPreview/previewApiUtils.js +59 -0
  47. package/app/v2Components/CommonTestAndPreview/reducer.js +47 -0
  48. package/app/v2Components/CommonTestAndPreview/sagas.js +75 -5
  49. package/app/v2Components/CommonTestAndPreview/selectors.js +51 -0
  50. package/app/v2Components/CommonTestAndPreview/tests/CustomValuesEditor.test.js +352 -0
  51. package/app/v2Components/CommonTestAndPreview/tests/DeliverySettings/ModifyDeliverySettings.test.js +1156 -0
  52. package/app/v2Components/CommonTestAndPreview/tests/DeliverySettings/index.test.js +334 -0
  53. package/app/v2Components/CommonTestAndPreview/tests/DeliverySettings/utils/parseSenderDetailsResponse.test.js +576 -0
  54. package/app/v2Components/CommonTestAndPreview/tests/SendTestMessage.test.js +156 -0
  55. package/app/v2Components/CommonTestAndPreview/tests/UnifiedPreview/index.test.js +199 -1
  56. package/app/v2Components/CommonTestAndPreview/tests/actions.test.js +50 -0
  57. package/app/v2Components/CommonTestAndPreview/tests/constants.test.js +18 -7
  58. package/app/v2Components/CommonTestAndPreview/tests/index.test.js +914 -5
  59. package/app/v2Components/CommonTestAndPreview/tests/previewApiUtils.test.js +67 -0
  60. package/app/v2Components/CommonTestAndPreview/tests/reducer.test.js +118 -0
  61. package/app/v2Components/CommonTestAndPreview/tests/sagas.test.js +146 -378
  62. package/app/v2Components/CommonTestAndPreview/tests/selectors.test.js +146 -0
  63. package/app/v2Components/ErrorInfoNote/index.js +24 -26
  64. package/app/v2Components/FormBuilder/index.js +182 -204
  65. package/app/v2Components/FormBuilder/messages.js +4 -8
  66. package/app/v2Components/HtmlEditor/HTMLEditor.js +7 -6
  67. package/app/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +1 -1
  68. package/app/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +928 -17
  69. package/app/v2Components/HtmlEditor/components/CodeEditorPane/index.js +4 -2
  70. package/app/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +452 -3
  71. package/app/v2Components/HtmlEditor/hooks/useValidation.js +12 -9
  72. package/app/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +132 -0
  73. package/app/v2Components/HtmlEditor/utils/htmlValidator.js +4 -2
  74. package/app/v2Components/SmsFallback/SmsFallbackLocalSelector.js +87 -0
  75. package/app/v2Components/SmsFallback/constants.js +73 -0
  76. package/app/v2Components/SmsFallback/index.js +956 -0
  77. package/app/v2Components/SmsFallback/index.scss +265 -0
  78. package/app/v2Components/SmsFallback/messages.js +78 -0
  79. package/app/v2Components/SmsFallback/smsFallbackUtils.js +107 -0
  80. package/app/v2Components/SmsFallback/tests/SmsFallbackLocalSelector.test.js +50 -0
  81. package/app/v2Components/SmsFallback/tests/rcsSmsFallback.acceptance.test.js +147 -0
  82. package/app/v2Components/SmsFallback/tests/smsFallbackHandlers.test.js +304 -0
  83. package/app/v2Components/SmsFallback/tests/smsFallbackUi.test.js +197 -0
  84. package/app/v2Components/SmsFallback/tests/smsFallbackUtils.test.js +261 -0
  85. package/app/v2Components/SmsFallback/tests/useLocalTemplateList.test.js +422 -0
  86. package/app/v2Components/SmsFallback/useLocalTemplateList.js +92 -0
  87. package/app/v2Components/TestAndPreviewSlidebox/index.js +22 -1
  88. package/app/v2Components/TestAndPreviewSlidebox/sagas.js +11 -4
  89. package/app/v2Components/TestAndPreviewSlidebox/tests/saga.test.js +3 -1
  90. package/app/v2Components/VarSegmentMessageEditor/constants.js +2 -0
  91. package/app/v2Components/VarSegmentMessageEditor/index.js +125 -0
  92. package/app/v2Components/VarSegmentMessageEditor/index.scss +46 -0
  93. package/app/v2Containers/BeeEditor/index.js +3 -0
  94. package/app/v2Containers/BeePopupEditor/index.js +9 -2
  95. package/app/v2Containers/Cap/mockData.js +0 -14
  96. package/app/v2Containers/Cap/reducer.js +3 -55
  97. package/app/v2Containers/Cap/tests/reducer.test.js +0 -102
  98. package/app/v2Containers/CommunicationFlow/CommunicationFlow.js +291 -0
  99. package/app/v2Containers/CommunicationFlow/CommunicationFlow.scss +25 -0
  100. package/app/v2Containers/CommunicationFlow/Tests/CommunicationFlow.test.js +255 -0
  101. package/app/v2Containers/CommunicationFlow/constants.js +200 -0
  102. package/app/v2Containers/CommunicationFlow/index.js +102 -0
  103. package/app/v2Containers/CommunicationFlow/messages.js +346 -0
  104. package/app/v2Containers/CommunicationFlow/steps/ChannelSelectionStep/ChannelSelectionStep.js +522 -0
  105. package/app/v2Containers/CommunicationFlow/steps/ChannelSelectionStep/ChannelSelectionStep.scss +170 -0
  106. package/app/v2Containers/CommunicationFlow/steps/ChannelSelectionStep/Tests/ChannelSelectionStep.test.js +796 -0
  107. package/app/v2Containers/CommunicationFlow/steps/ChannelSelectionStep/index.js +5 -0
  108. package/app/v2Containers/CommunicationFlow/steps/CommunicationStrategyStep/CommunicationStrategyStep.js +95 -0
  109. package/app/v2Containers/CommunicationFlow/steps/CommunicationStrategyStep/Tests/CommunicationStrategyStep.test.js +133 -0
  110. package/app/v2Containers/CommunicationFlow/steps/CommunicationStrategyStep/index.js +5 -0
  111. package/app/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/DeliverySettingsSection.js +289 -0
  112. package/app/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/DeliverySettingsSection.scss +70 -0
  113. package/app/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/SenderDetails.js +319 -0
  114. package/app/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/SenderDetails.scss +69 -0
  115. package/app/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/Tests/DeliverySettingsSection.test.js +616 -0
  116. package/app/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/Tests/SenderDetails.test.js +577 -0
  117. package/app/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/Tests/deliverySettingsConfig.test.js +1111 -0
  118. package/app/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/deliverySettingsConfig.js +696 -0
  119. package/app/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/index.js +7 -0
  120. package/app/v2Containers/CommunicationFlow/steps/DynamicControlsStep/DynamicControlsStep.js +102 -0
  121. package/app/v2Containers/CommunicationFlow/steps/DynamicControlsStep/DynamicControlsStep.scss +36 -0
  122. package/app/v2Containers/CommunicationFlow/steps/DynamicControlsStep/Tests/DynamicControlsStep.test.js +91 -0
  123. package/app/v2Containers/CommunicationFlow/steps/DynamicControlsStep/index.js +5 -0
  124. package/app/v2Containers/CommunicationFlow/steps/MessageTypeStep/MessageTypeStep.js +86 -0
  125. package/app/v2Containers/CommunicationFlow/steps/MessageTypeStep/Tests/MessageTypeStep.test.js +100 -0
  126. package/app/v2Containers/CommunicationFlow/steps/MessageTypeStep/index.js +5 -0
  127. package/app/v2Containers/CommunicationFlow/utils/getEnabledSteps.js +30 -0
  128. package/app/v2Containers/CreativesContainer/CreativesSlideBoxWrapper.js +43 -0
  129. package/app/v2Containers/CreativesContainer/SlideBoxContent.js +127 -11
  130. package/app/v2Containers/CreativesContainer/SlideBoxFooter.js +62 -9
  131. package/app/v2Containers/CreativesContainer/SlideBoxHeader.js +29 -4
  132. package/app/v2Containers/CreativesContainer/constants.js +24 -0
  133. package/app/v2Containers/CreativesContainer/embeddedSlideboxUtils.js +67 -0
  134. package/app/v2Containers/CreativesContainer/index.js +346 -71
  135. package/app/v2Containers/CreativesContainer/index.scss +51 -1
  136. package/app/v2Containers/CreativesContainer/messages.js +12 -0
  137. package/app/v2Containers/CreativesContainer/tests/SlideBoxContent.localTemplates.test.js +90 -0
  138. package/app/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +69 -1
  139. package/app/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +443 -0
  140. package/app/v2Containers/CreativesContainer/tests/SlideBoxHeader.test.js +110 -0
  141. package/app/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +147 -4
  142. package/app/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxHeader.test.js.snap +363 -0
  143. package/app/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +57 -10
  144. package/app/v2Containers/CreativesContainer/tests/embeddedSlideboxUtils.test.js +258 -0
  145. package/app/v2Containers/CreativesContainer/tests/index.test.js +71 -9
  146. package/app/v2Containers/CreativesContainer/tests/useLocalTemplatesProp.test.js +125 -0
  147. package/app/v2Containers/Email/index.js +2 -5
  148. package/app/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +58 -77
  149. package/app/v2Containers/EmailWrapper/components/EmailWrapperView.js +3 -0
  150. package/app/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +158 -89
  151. package/app/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +16 -1
  152. package/app/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +17 -12
  153. package/app/v2Containers/EmailWrapper/index.js +4 -0
  154. package/app/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +1 -0
  155. package/app/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +133 -0
  156. package/app/v2Containers/FTP/index.js +2 -51
  157. package/app/v2Containers/FTP/messages.js +0 -4
  158. package/app/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +110 -155
  159. package/app/v2Containers/InApp/index.js +297 -118
  160. package/app/v2Containers/InApp/tests/index.test.js +17 -6
  161. package/app/v2Containers/InApp/tests/mockData.js +1 -1
  162. package/app/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +19 -0
  163. package/app/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +3 -0
  164. package/app/v2Containers/InAppWrapper/index.js +3 -0
  165. package/app/v2Containers/InappAdvance/index.js +5 -104
  166. package/app/v2Containers/InappAdvance/tests/index.test.js +2 -0
  167. package/app/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +24 -3
  168. package/app/v2Containers/Line/Container/Text/index.js +0 -1
  169. package/app/v2Containers/MobilePush/Create/index.js +105 -28
  170. package/app/v2Containers/MobilePush/Create/messages.js +4 -0
  171. package/app/v2Containers/MobilePush/Edit/index.js +250 -68
  172. package/app/v2Containers/MobilePush/Edit/messages.js +4 -0
  173. package/app/v2Containers/MobilePushNew/components/PlatformContentFields.js +36 -12
  174. package/app/v2Containers/MobilePushNew/components/tests/PlatformContentFields.test.js +68 -27
  175. package/app/v2Containers/MobilePushNew/index.js +78 -35
  176. package/app/v2Containers/MobilePushNew/messages.js +8 -0
  177. package/app/v2Containers/MobilepushWrapper/index.js +11 -1
  178. package/app/v2Containers/Rcs/constants.js +32 -1
  179. package/app/v2Containers/Rcs/index.js +963 -916
  180. package/app/v2Containers/Rcs/index.scss +85 -6
  181. package/app/v2Containers/Rcs/messages.js +10 -1
  182. package/app/v2Containers/Rcs/rcsLibraryHydrationUtils.js +205 -0
  183. package/app/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +41136 -1566
  184. package/app/v2Containers/Rcs/tests/__snapshots__/utils.test.js.snap +0 -5
  185. package/app/v2Containers/Rcs/tests/index.test.js +41 -38
  186. package/app/v2Containers/Rcs/tests/mockData.js +38 -0
  187. package/app/v2Containers/Rcs/tests/rcsLibraryHydrationUtils.test.js +251 -0
  188. package/app/v2Containers/Rcs/tests/utils.test.js +379 -1
  189. package/app/v2Containers/Rcs/utils.js +358 -10
  190. package/app/v2Containers/Sms/Create/index.js +122 -39
  191. package/app/v2Containers/Sms/Create/messages.js +4 -0
  192. package/app/v2Containers/Sms/Edit/index.js +37 -3
  193. package/app/v2Containers/Sms/commonMethods.js +3 -6
  194. package/app/v2Containers/Sms/smsFormDataHelpers.js +67 -0
  195. package/app/v2Containers/Sms/tests/commonMethods.test.js +122 -0
  196. package/app/v2Containers/Sms/tests/smsFormDataHelpers.test.js +253 -0
  197. package/app/v2Containers/SmsTrai/Create/index.js +9 -4
  198. package/app/v2Containers/SmsTrai/Create/index.scss +1 -1
  199. package/app/v2Containers/SmsTrai/Edit/constants.js +2 -0
  200. package/app/v2Containers/SmsTrai/Edit/index.js +667 -160
  201. package/app/v2Containers/SmsTrai/Edit/index.scss +121 -0
  202. package/app/v2Containers/SmsTrai/Edit/messages.js +9 -4
  203. package/app/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4590 -2436
  204. package/app/v2Containers/SmsWrapper/index.js +41 -8
  205. package/app/v2Containers/TagList/index.js +63 -2
  206. package/app/v2Containers/TagList/messages.js +8 -0
  207. package/app/v2Containers/TagList/tests/TagList.test.js +122 -20
  208. package/app/v2Containers/TagList/tests/mockdata.js +17 -0
  209. package/app/v2Containers/Templates/TemplatesActionBar.js +101 -0
  210. package/app/v2Containers/Templates/_templates.scss +61 -2
  211. package/app/v2Containers/Templates/actions.js +11 -0
  212. package/app/v2Containers/Templates/constants.js +2 -0
  213. package/app/v2Containers/Templates/index.js +90 -40
  214. package/app/v2Containers/Templates/reducer.js +3 -1
  215. package/app/v2Containers/Templates/sagas.js +57 -12
  216. package/app/v2Containers/Templates/tests/TemplatesActionBar.test.js +120 -0
  217. package/app/v2Containers/Templates/tests/__snapshots__/index.test.js.snap +1043 -1079
  218. package/app/v2Containers/Templates/tests/reducer.test.js +12 -0
  219. package/app/v2Containers/Templates/tests/sagas.test.js +193 -12
  220. package/app/v2Containers/Templates/tests/smsTemplatesListApi.test.js +180 -0
  221. package/app/v2Containers/Templates/utils/smsTemplatesListApi.js +79 -0
  222. package/app/v2Containers/TemplatesV2/TemplatesV2.style.js +72 -1
  223. package/app/v2Containers/TemplatesV2/index.js +147 -49
  224. package/app/v2Containers/TemplatesV2/tests/TemplatesV2.localTemplates.test.js +131 -0
  225. package/app/v2Containers/Viber/index.js +9 -10
  226. package/app/v2Containers/Viber/index.scss +1 -1
  227. package/app/v2Containers/WebPush/Create/components/BrandIconSection.test.js +264 -0
  228. package/app/v2Containers/WebPush/Create/components/MessageSection.js +78 -19
  229. package/app/v2Containers/WebPush/Create/components/MessageSection.test.js +82 -0
  230. package/app/v2Containers/WebPush/Create/components/__snapshots__/BrandIconSection.test.js.snap +187 -0
  231. package/app/v2Containers/WebPush/Create/components/__snapshots__/MessageSection.test.js.snap +25 -17
  232. package/app/v2Containers/WebPush/Create/hooks/useAiraTriggerPosition.js +80 -0
  233. package/app/v2Containers/WebPush/Create/hooks/useAiraTriggerPosition.test.js +210 -0
  234. package/app/v2Containers/WebPush/Create/hooks/useTagManagement.js +1 -5
  235. package/app/v2Containers/WebPush/Create/hooks/useTagManagement.test.js +0 -7
  236. package/app/v2Containers/WebPush/Create/index.js +36 -6
  237. package/app/v2Containers/WebPush/Create/index.scss +5 -0
  238. package/app/v2Containers/WebPush/Create/messages.js +8 -1
  239. package/app/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +269 -0
  240. package/app/v2Containers/WebPush/Create/utils/validation.js +31 -15
  241. package/app/v2Containers/WebPush/Create/utils/validation.test.js +72 -24
  242. package/app/v2Containers/Whatsapp/index.js +28 -53
  243. package/app/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +26939 -3982
  244. package/app/v2Containers/Whatsapp/tests/index.test.js +172 -0
  245. package/app/v2Containers/Zalo/index.js +5 -11
  246. package/package.json +2 -2
  247. package/version +9 -0
@@ -0,0 +1,200 @@
1
+ /**
2
+ * CommunicationFlow Constants
3
+ */
4
+ import React from 'react';
5
+ import { FormattedMessage } from 'react-intl';
6
+ import messages from './messages';
7
+
8
+ // Step identifiers
9
+ export const STEPS = {
10
+ MESSAGE_TYPE: 'messageType',
11
+ COMMUNICATION_STRATEGY: 'communicationStrategy',
12
+ CHANNEL_SELECTION: 'channelSelection',
13
+ INCENTIVES: 'incentives',
14
+ DELIVERY_SETTINGS: 'deliverySettings',
15
+ DYNAMIC_CONTROLS: 'dynamicControls',
16
+ };
17
+
18
+ // Message Type values
19
+ export const MESSAGE_TYPES_OPTIONS = [
20
+ { value: 'promotional', label: <FormattedMessage {...messages.promotional} />, disabled: false },
21
+ { value: 'transactional', label: <FormattedMessage {...messages.transactional} />, disabled: false },
22
+ ];
23
+
24
+ // Communication Strategy values
25
+ export const COMMUNICATION_STRATEGIES_OPTIONS = [
26
+ {
27
+ value: 'SINGLE_TEMPLATE', label: <FormattedMessage {...messages.singleTemplate} />, disabled: false, isMultiChannel: false,
28
+ },
29
+ {
30
+ value: 'CHANNEL_PRIORITY', label: <FormattedMessage {...messages.channelPriority} />, disabled: false, isMultiChannel: true,
31
+ },
32
+ {
33
+ value: 'AB_TEST', label: <FormattedMessage {...messages.abTest} />, disabled: false, isMultiChannel: true,
34
+ },
35
+ ];
36
+
37
+ export const CHANNEL_PRIORITY = 'CHANNEL_PRIORITY';
38
+ export const AB_TEST = 'AB_TEST';
39
+ export const SINGLE_TEMPLATE = 'SINGLE_TEMPLATE';
40
+
41
+ // Channel config - single source of truth for CreativesContainer and TemplatesV2
42
+ // paneKey: TemplatesV2 defaultPanes object key (for channelsToHide)
43
+ // channelProp: CreativesContainer channel prop (must match pane.key for tab to be active)
44
+ export const CHANNELS = [
45
+ {
46
+ value: 'SMS',
47
+ label: <FormattedMessage {...messages.sms} />,
48
+ iconType: 'sms',
49
+ isActive: true,
50
+ paneKey: 'sms',
51
+ channelProp: 'sms',
52
+ },
53
+ {
54
+ value: 'EMAIL',
55
+ label: <FormattedMessage {...messages.email} />,
56
+ iconType: 'email',
57
+ isActive: true,
58
+ paneKey: 'email',
59
+ channelProp: 'email',
60
+ },
61
+ {
62
+ value: 'MOBILEPUSH',
63
+ label: <FormattedMessage {...messages.mobilePush} />,
64
+ iconType: 'mpush',
65
+ isActive: true,
66
+ paneKey: 'mPush',
67
+ channelProp: 'mobilepush',
68
+ },
69
+ {
70
+ value: 'INAPP',
71
+ label: <FormattedMessage {...messages.inApp} />,
72
+ iconType: 'mpush',
73
+ isActive: true,
74
+ paneKey: 'inApp',
75
+ channelProp: 'inapp',
76
+ requiresEnableNewChannels: true,
77
+ },
78
+ {
79
+ value: 'WHATSAPP',
80
+ label: <FormattedMessage {...messages.whatsApp} />,
81
+ iconType: 'whatsapp',
82
+ isActive: true,
83
+ paneKey: 'whatsapp',
84
+ channelProp: 'whatsapp',
85
+ requiresEnableNewChannels: true,
86
+ },
87
+ {
88
+ value: 'WECHAT',
89
+ label: <FormattedMessage {...messages.weChat} />,
90
+ iconType: 'wechat',
91
+ isActive: false,
92
+ paneKey: 'weChat',
93
+ channelProp: 'wechat',
94
+ },
95
+ {
96
+ value: 'LINE',
97
+ label: <FormattedMessage {...messages.line} />,
98
+ iconType: 'line',
99
+ isActive: true,
100
+ paneKey: 'line',
101
+ channelProp: 'line',
102
+ },
103
+ {
104
+ value: 'VIBER',
105
+ label: <FormattedMessage {...messages.viber} />,
106
+ iconType: 'viber',
107
+ isActive: true,
108
+ paneKey: 'viber',
109
+ channelProp: 'viber',
110
+ },
111
+ {
112
+ value: 'FACEBOOK',
113
+ label: <FormattedMessage {...messages.facebook} />,
114
+ iconType: 'facebook',
115
+ isActive: true,
116
+ paneKey: 'facebook',
117
+ channelProp: 'facebook',
118
+ },
119
+ {
120
+ value: 'RCS',
121
+ label: <FormattedMessage {...messages.rcs} />,
122
+ iconType: 'rcs',
123
+ isActive: true,
124
+ paneKey: 'rcs',
125
+ channelProp: 'rcs',
126
+ requiresEnableNewChannels: true,
127
+ },
128
+ {
129
+ value: 'ZALO',
130
+ label: <FormattedMessage {...messages.zalo} />,
131
+ iconType: 'zalo',
132
+ isActive: true,
133
+ paneKey: 'zalo',
134
+ channelProp: 'zalo',
135
+ requiresEnableNewChannels: true,
136
+ },
137
+ {
138
+ value: 'WEBPUSH',
139
+ label: <FormattedMessage {...messages.webPush} />,
140
+ iconType: 'webpush',
141
+ isActive: true,
142
+ paneKey: 'webpush',
143
+ channelProp: 'webpush',
144
+ },
145
+ {
146
+ value: 'CALLTASK',
147
+ label: <FormattedMessage {...messages.callTask} />,
148
+ iconType: 'call',
149
+ isActive: true,
150
+ paneKey: 'callTask',
151
+ channelProp: 'call_task', // Must match TemplatesV2 pane.key
152
+ },
153
+ ];
154
+
155
+ // Delivery settings - channels that show/hide sender details
156
+ export const CHANNELS_WITHOUT_DELIVERY = ['MPUSH', 'MOBILEPUSH', 'INAPP', 'WEBPUSH'];
157
+ export const SENDER_ID_CHANNELS = ['SMS', 'EMAIL', 'VIBER', 'ZALO', 'LINE'];
158
+ export const SENDER_NUMBER_CHANNELS = ['WHATSAPP', 'RCS'];
159
+
160
+ // Dynamic Controls — default config for the Other Controls section.
161
+ // label and description are resolved via FormattedMessage so consumers
162
+ // get translated strings without needing to hardcode copy in their config.
163
+ export const DYNAMIC_CONTROLS_CONFIG = [
164
+ {
165
+ key: 'sendToControlCustomers',
166
+ label: <FormattedMessage {...messages.sendToControlCustomers} />,
167
+ },
168
+ {
169
+ key: 'sendToBrandPocs',
170
+ label: <FormattedMessage {...messages.sendToBrandPocs} />,
171
+ },
172
+ {
173
+ key: 'useTinyUrl',
174
+ label: <FormattedMessage {...messages.useTinyUrl} />,
175
+ },
176
+ {
177
+ key: 'overrideDailyLimit',
178
+ label: <FormattedMessage {...messages.overrideDailyLimit} />,
179
+ description: <FormattedMessage {...messages.overrideDailyLimitDesc} />,
180
+ },
181
+ ];
182
+
183
+ // Incentive types
184
+ export const INCENTIVE_TYPES = [
185
+ {
186
+ value: 'coupons', label: <FormattedMessage {...messages.coupons} />, isActive: true, disabled: false,
187
+ },
188
+ {
189
+ value: 'points', label: <FormattedMessage {...messages.points} />, isActive: true, disabled: false,
190
+ },
191
+ {
192
+ value: 'promotions', label: <FormattedMessage {...messages.promotions} />, isActive: true, disabled: false,
193
+ },
194
+ {
195
+ value: 'giftVouchers', label: <FormattedMessage {...messages.giftVouchers} />, isActive: false, disabled: false,
196
+ },
197
+ {
198
+ value: 'badges', label: <FormattedMessage {...messages.badges} />, isActive: false, disabled: false,
199
+ },
200
+ ];
@@ -0,0 +1,102 @@
1
+ /**
2
+ * CommunicationFlow - Public Entry Point
3
+ *
4
+ * Single entry for consumers. Wires config + callbacks and renders
5
+ * the CommunicationFlow orchestrator component.
6
+ *
7
+ */
8
+
9
+ import React from 'react';
10
+ import PropTypes from 'prop-types';
11
+ import CommunicationFlow from './CommunicationFlow';
12
+ import { hasSupportEngagementModule } from '../../utils/common';
13
+
14
+ const CommunicationFlowContainer = ({
15
+ config,
16
+ initialData,
17
+ onSave,
18
+ onCancel,
19
+ onChange,
20
+ ...otherProps
21
+ }) => {
22
+ if (!hasSupportEngagementModule()) {
23
+ return null;
24
+ }
25
+
26
+ return (
27
+ <CommunicationFlow
28
+ config={config}
29
+ initialData={initialData}
30
+ onSave={onSave}
31
+ onCancel={onCancel}
32
+ onChange={onChange}
33
+ {...otherProps}
34
+ />
35
+ );
36
+ };
37
+
38
+ CommunicationFlowContainer.propTypes = {
39
+ config: PropTypes.shape({
40
+ consumer: PropTypes.oneOf(['campaigns', 'loyalty', 'adiona']).isRequired,
41
+ channel: PropTypes.string, // optional if channel step is skipped
42
+ mode: PropTypes.oneOf(['create', 'edit', 'preview']).isRequired,
43
+ channelsToHide: PropTypes.arrayOf(PropTypes.string),
44
+ channelsToDisable: PropTypes.arrayOf(PropTypes.string),
45
+ features: PropTypes.shape({
46
+ messageTypeData: PropTypes.shape({
47
+ options: PropTypes.arrayOf(PropTypes.shape({
48
+ value: PropTypes.string.isRequired,
49
+ label: PropTypes.string.isRequired,
50
+ })),
51
+ defaultOption: PropTypes.shape({
52
+ value: PropTypes.string.isRequired,
53
+ label: PropTypes.string.isRequired,
54
+ }),
55
+ required: PropTypes.bool,
56
+ }),
57
+ communicationStrategyData: PropTypes.shape({
58
+ options: PropTypes.arrayOf(PropTypes.shape({
59
+ value: PropTypes.string.isRequired,
60
+ label: PropTypes.string.isRequired,
61
+ })),
62
+ defaultOption: PropTypes.shape({
63
+ value: PropTypes.string.isRequired,
64
+ label: PropTypes.string.isRequired,
65
+ }),
66
+ required: PropTypes.bool,
67
+ disabled: PropTypes.bool,
68
+ }),
69
+ contentTemplateData: PropTypes.shape({
70
+ required: PropTypes.bool,
71
+ channels: PropTypes.array,
72
+ channelsToHide: PropTypes.arrayOf(PropTypes.string),
73
+ channelsToDisable: PropTypes.arrayOf(PropTypes.string),
74
+ }),
75
+ incentivesData: PropTypes.shape({
76
+ required: PropTypes.bool,
77
+ types: PropTypes.arrayOf(PropTypes.shape({
78
+ value: PropTypes.string.isRequired,
79
+ label: PropTypes.string.isRequired,
80
+ isActive: PropTypes.bool,
81
+ })),
82
+ }),
83
+ deliverySettingsData: PropTypes.object,
84
+ dynamicControlsData: PropTypes.shape({
85
+ required: PropTypes.bool,
86
+ controls: PropTypes.array,
87
+ }),
88
+ }),
89
+ context: PropTypes.object, // ouId, campaignId, programId, etc.
90
+ }).isRequired,
91
+ initialData: PropTypes.object, // for edit/preview mode
92
+ onSave: PropTypes.func.isRequired, // (data) => void - called when user saves
93
+ onCancel: PropTypes.func.isRequired, // () => void - called when user cancels
94
+ onChange: PropTypes.func, // (data) => void - optional, called on data changes
95
+ };
96
+
97
+ CommunicationFlowContainer.defaultProps = {
98
+ initialData: null,
99
+ onChange: null,
100
+ };
101
+
102
+ export default CommunicationFlowContainer;
@@ -0,0 +1,346 @@
1
+ /**
2
+ * CommunicationFlow Messages (i18n)
3
+ */
4
+
5
+ const prefix = 'creatives.v2Containers.CommunicationFlow';
6
+
7
+ export default {
8
+ // Step titles
9
+ stepMessageType: {
10
+ id: `${prefix}.stepMessageType`,
11
+ defaultMessage: 'Message Type',
12
+ },
13
+ stepCommunicationStrategy: {
14
+ id: `${prefix}.stepCommunicationStrategy`,
15
+ defaultMessage: 'Communication Strategy',
16
+ },
17
+ stepChannelSelection: {
18
+ id: `${prefix}.stepChannelSelection`,
19
+ defaultMessage: 'Channel Selection',
20
+ },
21
+ stepIncentives: {
22
+ id: `${prefix}.stepIncentives`,
23
+ defaultMessage: 'Incentives',
24
+ },
25
+ stepDeliverySettings: {
26
+ id: `${prefix}.stepDeliverySettings`,
27
+ defaultMessage: 'Delivery Settings',
28
+ },
29
+ stepOtherSettings: {
30
+ id: `${prefix}.stepOtherSettings`,
31
+ defaultMessage: 'Other Settings',
32
+ },
33
+
34
+ // Validation messages
35
+ messageTypeRequired: {
36
+ id: `${prefix}.messageTypeRequired`,
37
+ defaultMessage: 'Message type is required',
38
+ },
39
+ communicationStrategyRequired: {
40
+ id: `${prefix}.communicationStrategyRequired`,
41
+ defaultMessage: 'Communication strategy is required',
42
+ },
43
+ channelSelectionRequired: {
44
+ id: `${prefix}.channelSelectionRequired`,
45
+ defaultMessage: 'Channel selection is required',
46
+ },
47
+
48
+ // Action buttons
49
+ next: {
50
+ id: `${prefix}.next`,
51
+ defaultMessage: 'Next',
52
+ },
53
+ back: {
54
+ id: `${prefix}.back`,
55
+ defaultMessage: 'Back',
56
+ },
57
+ cancel: {
58
+ id: `${prefix}.cancel`,
59
+ defaultMessage: 'Cancel',
60
+ },
61
+ save: {
62
+ id: `${prefix}.save`,
63
+ defaultMessage: 'Save',
64
+ },
65
+
66
+ // Slidebox header
67
+ addMessage: {
68
+ id: `${prefix}.addMessage`,
69
+ defaultMessage: 'Add message',
70
+ },
71
+
72
+ // Step prompts
73
+ messageTypeHeading: {
74
+ id: `${prefix}.messageTypeHeading`,
75
+ defaultMessage: 'Message type',
76
+ },
77
+ communicationStrategyHeading: {
78
+ id: `${prefix}.communicationStrategyHeading`,
79
+ defaultMessage: 'Communication strategy',
80
+ },
81
+ communicationStrategyPlaceholder: {
82
+ id: `${prefix}.communicationStrategyPlaceholder`,
83
+ defaultMessage: 'Select strategy',
84
+ },
85
+ promotional: {
86
+ id: `${prefix}.promotional`,
87
+ defaultMessage: 'Promotional',
88
+ },
89
+ transactional: {
90
+ id: `${prefix}.transactional`,
91
+ defaultMessage: 'Transactional',
92
+ },
93
+ singleTemplate: {
94
+ id: `${prefix}.singleTemplate`,
95
+ defaultMessage: 'Single template',
96
+ },
97
+ channelPriority: {
98
+ id: `${prefix}.channelPriority`,
99
+ defaultMessage: 'Channel priority',
100
+ },
101
+ abTest: {
102
+ id: `${prefix}.abTest`,
103
+ defaultMessage: 'A/B Test',
104
+ },
105
+ singleChannel: {
106
+ id: `${prefix}.singleChannel`,
107
+ defaultMessage: 'Single channel',
108
+ },
109
+ multipleChannel: {
110
+ id: `${prefix}.multipleChannel`,
111
+ defaultMessage: 'Multiple channel',
112
+ },
113
+ incentivesPrompt: {
114
+ id: `${prefix}.incentivesPrompt`,
115
+ defaultMessage: 'Incentives',
116
+ },
117
+ incentivesPlaceholder: {
118
+ id: `${prefix}.incentivesPlaceholder`,
119
+ defaultMessage: 'Select incentives',
120
+ },
121
+ deliverySettingsPrompt: {
122
+ id: `${prefix}.deliverySettingsPrompt`,
123
+ defaultMessage: 'Delivery settings',
124
+ },
125
+ deliverySettingsPlaceholder: {
126
+ id: `${prefix}.deliverySettingsPlaceholder`,
127
+ defaultMessage: 'Select delivery settings',
128
+ },
129
+ otherSettingsPrompt: {
130
+ id: `${prefix}.otherSettingsPrompt`,
131
+ defaultMessage: 'Other settings',
132
+ },
133
+ otherSettingsPlaceholder: {
134
+ id: `${prefix}.otherSettingsPlaceholder`,
135
+ defaultMessage: 'Select other settings',
136
+ },
137
+ addMessageContentAndIncentive: {
138
+ id: `${prefix}.addMessageContentAndIncentive`,
139
+ defaultMessage: 'Add message content and incentive',
140
+ },
141
+ contentTemplate: {
142
+ id: `${prefix}.contentTemplate`,
143
+ defaultMessage: 'Content template',
144
+ },
145
+ addedContent: {
146
+ id: `${prefix}.addedContent`,
147
+ defaultMessage: 'Added content',
148
+ },
149
+ addContentTemplate: {
150
+ id: `${prefix}.addContentTemplate`,
151
+ defaultMessage: 'Content template',
152
+ },
153
+ edit: {
154
+ id: `${prefix}.edit`,
155
+ defaultMessage: 'Edit',
156
+ },
157
+ delete: {
158
+ id: `${prefix}.delete`,
159
+ defaultMessage: 'Delete',
160
+ },
161
+ previewAndTest: {
162
+ id: `${prefix}.previewAndTest`,
163
+ defaultMessage: 'Preview and Test',
164
+ },
165
+ remove: {
166
+ id: `${prefix}.remove`,
167
+ defaultMessage: 'Remove',
168
+ },
169
+ senderDetails: {
170
+ id: `${prefix}.senderDetails`,
171
+ defaultMessage: 'Sender details',
172
+ },
173
+ saveChanges: {
174
+ id: `${prefix}.saveChanges`,
175
+ defaultMessage: 'Save changes',
176
+ },
177
+ senderIdLabel: {
178
+ id: `${prefix}.senderIdLabel`,
179
+ defaultMessage: 'Sender ID',
180
+ },
181
+ senderNumberLabel: {
182
+ id: `${prefix}.senderNumberLabel`,
183
+ defaultMessage: 'Sender number',
184
+ },
185
+ viberAccountLabel: {
186
+ id: `${prefix}.viberAccountLabel`,
187
+ defaultMessage: 'Viber account',
188
+ },
189
+ accountLabel: {
190
+ id: `${prefix}.accountLabel`,
191
+ defaultMessage: 'Account',
192
+ },
193
+ smsDomain: {
194
+ id: `${prefix}.smsDomain`,
195
+ defaultMessage: 'SMS Domain',
196
+ },
197
+ emailDomainLabel: {
198
+ id: `${prefix}.emailDomainLabel`,
199
+ defaultMessage: 'Email Domain',
200
+ },
201
+ emailSenderName: {
202
+ id: `${prefix}.emailSenderName`,
203
+ defaultMessage: 'Sender name',
204
+ },
205
+ emailReplyToId: {
206
+ id: `${prefix}.emailReplyToId`,
207
+ defaultMessage: 'Reply-to ID',
208
+ },
209
+ reset: {
210
+ id: `${prefix}.reset`,
211
+ defaultMessage: 'Reset',
212
+ },
213
+ select: {
214
+ id: `${prefix}.select`,
215
+ defaultMessage: 'Select',
216
+ },
217
+ addIncentive: {
218
+ id: `${prefix}.addIncentive`,
219
+ defaultMessage: 'Add incentive',
220
+ },
221
+ optional: {
222
+ id: `${prefix}.optional`,
223
+ defaultMessage: '(Optional)',
224
+ },
225
+ sms: {
226
+ id: `${prefix}.sms`,
227
+ defaultMessage: 'SMS',
228
+ },
229
+ email: {
230
+ id: `${prefix}.email`,
231
+ defaultMessage: 'Email',
232
+ },
233
+ mobilePush: {
234
+ id: `${prefix}.mobilePush`,
235
+ defaultMessage: 'Mobile push',
236
+ },
237
+ inApp: {
238
+ id: `${prefix}.inApp`,
239
+ defaultMessage: 'In-app',
240
+ },
241
+ whatsApp: {
242
+ id: `${prefix}.whatsApp`,
243
+ defaultMessage: 'WhatsApp',
244
+ },
245
+ weChat: {
246
+ id: `${prefix}.weChat`,
247
+ defaultMessage: 'WeChat',
248
+ },
249
+ line: {
250
+ id: `${prefix}.line`,
251
+ defaultMessage: 'Line',
252
+ },
253
+ viber: {
254
+ id: `${prefix}.viber`,
255
+ defaultMessage: 'Viber',
256
+ },
257
+ facebook: {
258
+ id: `${prefix}.facebook`,
259
+ defaultMessage: 'Facebook',
260
+ },
261
+ rcs: {
262
+ id: `${prefix}.rcs`,
263
+ defaultMessage: 'RCS',
264
+ },
265
+ zalo: {
266
+ id: `${prefix}.zalo`,
267
+ defaultMessage: 'Zalo',
268
+ },
269
+ callTask: {
270
+ id: `${prefix}.callTask`,
271
+ defaultMessage: 'Call task',
272
+ },
273
+ webPush: {
274
+ id: `${prefix}.webPush`,
275
+ defaultMessage: 'Web push',
276
+ },
277
+ incentives: {
278
+ id: `${prefix}.incentives`,
279
+ defaultMessage: 'Incentives',
280
+ },
281
+ coupons: {
282
+ id: `${prefix}.coupons`,
283
+ defaultMessage: 'Coupons',
284
+ },
285
+ points: {
286
+ id: `${prefix}.points`,
287
+ defaultMessage: 'Points',
288
+ },
289
+ promotions: {
290
+ id: `${prefix}.promotions`,
291
+ defaultMessage: 'Promotions',
292
+ },
293
+ giftVouchers: {
294
+ id: `${prefix}.giftVouchers`,
295
+ defaultMessage: 'Gift vouchers',
296
+ },
297
+ badges: {
298
+ id: `${prefix}.badges`,
299
+ defaultMessage: 'Badges',
300
+ },
301
+ dynamicControlsTitle: {
302
+ id: `${prefix}.dynamicControlsTitle`,
303
+ defaultMessage: 'Other controls',
304
+ },
305
+ whatsappBusinessAccount: {
306
+ id: `${prefix}.whatsappBusinessAccount`,
307
+ defaultMessage: 'WhatsApp Business account',
308
+ },
309
+ whatsappAccountTooltip: {
310
+ id: `${prefix}.whatsappAccountTooltip`,
311
+ defaultMessage: 'Message template selected belongs to this account',
312
+ },
313
+ rcsAccountLabel: {
314
+ id: `${prefix}.rcsAccountLabel`,
315
+ defaultMessage: 'RCS account',
316
+ },
317
+ // Dynamic Controls toggle labels and descriptions
318
+ sendToControlCustomers: {
319
+ id: `${prefix}.sendToControlCustomers`,
320
+ defaultMessage: 'Send to control customers',
321
+ },
322
+ sendToBrandPocs: {
323
+ id: `${prefix}.sendToBrandPocs`,
324
+ defaultMessage: 'Send to brand POCs',
325
+ },
326
+ useTinyUrl: {
327
+ id: `${prefix}.useTinyUrl`,
328
+ defaultMessage: 'Use tiny URL',
329
+ },
330
+ overrideDailyLimit: {
331
+ id: `${prefix}.overrideDailyLimit`,
332
+ defaultMessage: 'Override daily communication limit',
333
+ },
334
+ overrideDailyLimitDesc: {
335
+ id: `${prefix}.overrideDailyLimitDesc`,
336
+ defaultMessage: "Customers will still receive this message even if they've already reached their daily message limit",
337
+ },
338
+ domainGatewayError: {
339
+ id: `${prefix}.domainGatewayError`,
340
+ defaultMessage: 'Domain gateway id is not found for the selected channel. Please contact the gateway team to register them with Capillary.',
341
+ },
342
+ senderNotConfiguredError: {
343
+ id: `${prefix}.senderNotConfiguredError`,
344
+ defaultMessage: 'Selected domain gateway id is not correct. Please change the domain id or contact the gateway team to register them with Capillary.',
345
+ },
346
+ };