@capillarytech/creatives-library 7.12.32 → 7.12.34

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 (295) hide show
  1. package/components/Card/tests/index.test.js +10 -12
  2. package/components/FormBuilder/_formBuilder.scss +1 -1
  3. package/components/SlideBox/index.js +0 -1
  4. package/components/SlideBox/tests/index.test.js +2 -2
  5. package/containers/Assets/Gallery/tests/reducer.test.js +2 -1
  6. package/containers/Cap/tests/__snapshots__/index.test.js.snap +1876 -0
  7. package/containers/Cap/tests/index.test.js +16 -10
  8. package/containers/LanguageProvider/tests/index.test.js +5 -1
  9. package/i18n.js +6 -4
  10. package/package.json +4 -1
  11. package/translations/en.json +42 -119
  12. package/translations/zh.json +38 -115
  13. package/utils/test-utils.js +63 -0
  14. package/v2Components/CapActionButton/index.js +54 -48
  15. package/v2Components/CapActionButton/tests/index.test.js +33 -24
  16. package/v2Components/CapWhatsappCTA/constants.js +34 -0
  17. package/v2Components/CapWhatsappCTA/index.js +321 -0
  18. package/v2Components/CapWhatsappCTA/index.scss +64 -0
  19. package/v2Components/CapWhatsappCTA/messages.js +56 -0
  20. package/v2Components/EmailPreviewV2/index.js +1 -1
  21. package/v2Components/EmailPreviewV2/tests/__snapshots__/index.test.js.snap +135 -0
  22. package/v2Components/EmailPreviewV2/tests/index.test.js +8 -2
  23. package/v2Components/FormBuilder/_formBuilder.scss +1 -1
  24. package/v2Components/MarketingObjective/index.js +2 -2
  25. package/v2Components/MarketingObjective/test/index.test.js +33 -0
  26. package/v2Components/SlideBox/tests/index.test.js +2 -2
  27. package/v2Components/TemplatePreview/_templatePreview.scss +8 -0
  28. package/v2Components/TemplatePreview/index.js +29 -2
  29. package/v2Components/TemplatePreview/tests/__snapshots__/index.test.js.snap +1 -1
  30. package/v2Containers/Assets/Gallery/tests/reducer.test.js +2 -1
  31. package/v2Containers/Cap/messages.js +4 -0
  32. package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +1930 -0
  33. package/v2Containers/Cap/tests/index.test.js +56 -10
  34. package/v2Containers/LanguageProvider/tests/index.test.js +9 -2
  35. package/v2Containers/LanguageProvider/tests/reducer.test.js +5 -1
  36. package/v2Containers/Line/Container/Video/index.js +1 -0
  37. package/v2Containers/Line/Container/Video/tests/index.test.js +62 -0
  38. package/v2Containers/Rcs/index.js +71 -67
  39. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +2004 -16874
  40. package/v2Containers/Rcs/tests/index.test.js +7 -12
  41. package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +176 -476
  42. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +336 -952
  43. package/v2Containers/Templates/index.js +10 -5
  44. package/v2Containers/Templates/tests/__snapshots__/index.test.js.snap +499 -419
  45. package/v2Containers/Templates/tests/index.test.js +8 -4
  46. package/v2Containers/Whatsapp/constants.js +22 -5
  47. package/v2Containers/Whatsapp/index.js +199 -9
  48. package/v2Containers/Whatsapp/index.scss +42 -1
  49. package/v2Containers/Whatsapp/messages.js +39 -2
  50. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +37677 -5915
  51. package/v2Containers/Whatsapp/utils.js +37 -0
  52. package/v2Containers/mockdata.js +47 -0
  53. package/components/BreadCrumbs/tests/index.test.js +0 -10
  54. package/components/CapTagList/tests/index.test.js +0 -10
  55. package/components/CardGrid/tests/index.test.js +0 -10
  56. package/components/Ckeditor/tests/index.test.js +0 -10
  57. package/components/Component/tests/index.test.js +0 -10
  58. package/components/CustomPopOver/tests/index.test.js +0 -10
  59. package/components/DateFilter/tests/index.test.js +0 -15
  60. package/components/DateRange/tests/index.test.js +0 -10
  61. package/components/Edmeditor/tests/index.test.js +0 -10
  62. package/components/EmailPreview/tests/index.test.js +0 -10
  63. package/components/Footer/tests/index.test.js +0 -10
  64. package/components/FormBuilder/tests/index.test.js +0 -10
  65. package/components/Header/tests/index.test.js +0 -10
  66. package/components/ImagePreview/tests/index.test.js +0 -10
  67. package/components/PageHeader/tests/index.test.js +0 -10
  68. package/components/Pagination/tests/index.test.js +0 -10
  69. package/components/PreviewSideBar/tests/index.test.js +0 -10
  70. package/components/Sidebar/tests/index.test.js +0 -10
  71. package/components/SmsEditor/tests/index.test.js +0 -10
  72. package/components/SmsTest/tests/index.test.js +0 -10
  73. package/components/TemplatePreview/WechatRichmediaTemplatePreview/tests/index.test.js +0 -10
  74. package/components/TemplatePreview/tests/index.test.js +0 -10
  75. package/components/Toastr/tests/index.test.js +0 -10
  76. package/components/ToastrMessage/tests/index.test.js +0 -10
  77. package/components/TopBar/tests/index.test.js +0 -10
  78. package/containers/App/tests/actions.test.js +0 -18
  79. package/containers/App/tests/reducer.test.js +0 -9
  80. package/containers/App/tests/sagas.test.js +0 -15
  81. package/containers/App/tests/selectors.test.js +0 -10
  82. package/containers/Assets/Gallery/tests/index.test.js +0 -10
  83. package/containers/Assets/Gallery/tests/sagas.test.js +0 -15
  84. package/containers/Assets/Gallery/tests/selectors.test.js +0 -10
  85. package/containers/Dashboard/tests/actions.test.js +0 -18
  86. package/containers/Dashboard/tests/index.test.js +0 -10
  87. package/containers/Dashboard/tests/reducer.test.js +0 -9
  88. package/containers/Dashboard/tests/sagas.test.js +0 -15
  89. package/containers/Dashboard/tests/selectors.test.js +0 -10
  90. package/containers/Ebill/tests/actions.test.js +0 -18
  91. package/containers/Ebill/tests/index.test.js +0 -10
  92. package/containers/Ebill/tests/reducer.test.js +0 -9
  93. package/containers/Ebill/tests/sagas.test.js +0 -15
  94. package/containers/Ebill/tests/selectors.test.js +0 -10
  95. package/containers/Email/tests/actions.test.js +0 -18
  96. package/containers/Email/tests/index.test.js +0 -10
  97. package/containers/Email/tests/reducer.test.js +0 -9
  98. package/containers/Email/tests/sagas.test.js +0 -15
  99. package/containers/Email/tests/selectors.test.js +0 -10
  100. package/containers/Line/Edit/tests/actions.test.js +0 -18
  101. package/containers/Line/Edit/tests/index.test.js +0 -10
  102. package/containers/Line/Edit/tests/reducer.test.js +0 -9
  103. package/containers/Line/Edit/tests/sagas.test.js +0 -15
  104. package/containers/Line/Edit/tests/selectors.test.js +0 -10
  105. package/containers/Login/components/LoginForm/tests/index.test.js +0 -10
  106. package/containers/Login/tests/index.test.js +0 -10
  107. package/containers/Login/tests/sagas.test.js +0 -15
  108. package/containers/Login/tests/selectors.test.js +0 -10
  109. package/containers/MobilePush/Create/tests/actions.test.js +0 -18
  110. package/containers/MobilePush/Create/tests/index.test.js +0 -10
  111. package/containers/MobilePush/Create/tests/reducer.test.js +0 -9
  112. package/containers/MobilePush/Create/tests/sagas.test.js +0 -15
  113. package/containers/MobilePush/Create/tests/selectors.test.js +0 -10
  114. package/containers/MobilePush/Edit/tests/actions.test.js +0 -18
  115. package/containers/MobilePush/Edit/tests/index.test.js +0 -10
  116. package/containers/MobilePush/Edit/tests/reducer.test.js +0 -9
  117. package/containers/MobilePush/Edit/tests/sagas.test.js +0 -15
  118. package/containers/MobilePush/Edit/tests/selectors.test.js +0 -10
  119. package/containers/Sms/Create/tests/actions.test.js +0 -18
  120. package/containers/Sms/Create/tests/index.test.js +0 -10
  121. package/containers/Sms/Create/tests/reducer.test.js +0 -9
  122. package/containers/Sms/Create/tests/sagas.test.js +0 -15
  123. package/containers/Sms/Create/tests/selectors.test.js +0 -10
  124. package/containers/Sms/Edit/tests/actions.test.js +0 -18
  125. package/containers/Sms/Edit/tests/index.test.js +0 -10
  126. package/containers/Sms/Edit/tests/reducer.test.js +0 -9
  127. package/containers/Sms/Edit/tests/sagas.test.js +0 -15
  128. package/containers/Sms/Edit/tests/selectors.test.js +0 -10
  129. package/containers/TagList/tests/actions.test.js +0 -18
  130. package/containers/TagList/tests/index.test.js +0 -10
  131. package/containers/TagList/tests/reducer.test.js +0 -9
  132. package/containers/TagList/tests/sagas.test.js +0 -15
  133. package/containers/TagList/tests/selectors.test.js +0 -10
  134. package/containers/Templates/tests/actions.test.js +0 -18
  135. package/containers/Templates/tests/index.test.js +0 -10
  136. package/containers/Templates/tests/reducer.test.js +0 -9
  137. package/containers/Templates/tests/sagas.test.js +0 -15
  138. package/containers/Templates/tests/selectors.test.js +0 -10
  139. package/containers/Testv2/tests/actions.test.js +0 -18
  140. package/containers/Testv2/tests/index.test.js +0 -10
  141. package/containers/Testv2/tests/reducer.test.js +0 -9
  142. package/containers/Testv2/tests/sagas.test.js +0 -15
  143. package/containers/Testv2/tests/selectors.test.js +0 -10
  144. package/containers/WeChat/MapTemplates/tests/actions.test.js +0 -18
  145. package/containers/WeChat/MapTemplates/tests/index.test.js +0 -10
  146. package/containers/WeChat/MapTemplates/tests/reducer.test.js +0 -9
  147. package/containers/WeChat/MapTemplates/tests/sagas.test.js +0 -15
  148. package/containers/WeChat/MapTemplates/tests/selectors.test.js +0 -10
  149. package/containers/WeChat/RichmediaTemplates/Create/tests/actions.test.js +0 -18
  150. package/containers/WeChat/RichmediaTemplates/Create/tests/index.test.js +0 -10
  151. package/containers/WeChat/RichmediaTemplates/Create/tests/reducer.test.js +0 -9
  152. package/containers/WeChat/RichmediaTemplates/Create/tests/sagas.test.js +0 -15
  153. package/containers/WeChat/RichmediaTemplates/Create/tests/selectors.test.js +0 -10
  154. package/containers/WeChat/RichmediaTemplates/Edit/tests/actions.test.js +0 -18
  155. package/containers/WeChat/RichmediaTemplates/Edit/tests/index.test.js +0 -10
  156. package/containers/WeChat/RichmediaTemplates/Edit/tests/reducer.test.js +0 -9
  157. package/containers/WeChat/RichmediaTemplates/Edit/tests/sagas.test.js +0 -15
  158. package/containers/WeChat/RichmediaTemplates/Edit/tests/selectors.test.js +0 -10
  159. package/containers/WeChat/RichmediaTemplates/View/tests/actions.test.js +0 -18
  160. package/containers/WeChat/RichmediaTemplates/View/tests/index.test.js +0 -10
  161. package/containers/WeChat/RichmediaTemplates/View/tests/reducer.test.js +0 -9
  162. package/containers/WeChat/RichmediaTemplates/View/tests/sagas.test.js +0 -15
  163. package/containers/WeChat/RichmediaTemplates/View/tests/selectors.test.js +0 -10
  164. package/gtm/tests/events.test.js +0 -3
  165. package/v2Components/BreadCrumbs/tests/index.test.js +0 -10
  166. package/v2Components/CapActionButton/tests/__snapshots__/index.test.js.snap +0 -151
  167. package/v2Components/CapTagList/tests/index.test.js +0 -10
  168. package/v2Components/Card/tests/index.test.js +0 -10
  169. package/v2Components/CardGrid/tests/index.test.js +0 -10
  170. package/v2Components/Ckeditor/tests/index.test.js +0 -10
  171. package/v2Components/CmsTemplatesComponent/tests/index.test.js +0 -10
  172. package/v2Components/Component/tests/index.test.js +0 -10
  173. package/v2Components/CustomPopOver/tests/index.test.js +0 -10
  174. package/v2Components/Edmeditor/tests/index.test.js +0 -10
  175. package/v2Components/EmailPreview/tests/index.test.js +0 -10
  176. package/v2Components/Footer/tests/index.test.js +0 -10
  177. package/v2Components/FormBuilder/tests/index.test.js +0 -10
  178. package/v2Components/ImagePreview/tests/index.test.js +0 -10
  179. package/v2Components/MobilePushPreviewV2/tests/index.test.js +0 -10
  180. package/v2Components/NavigationBar/tests/index.test.js +0 -11
  181. package/v2Components/NewCallTask/tests/index.test.js +0 -10
  182. package/v2Components/Pagination/tests/index.test.js +0 -10
  183. package/v2Components/PreviewSideBar/tests/index.test.js +0 -10
  184. package/v2Components/SmsTest/tests/index.test.js +0 -10
  185. package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/tests/index.test.js +0 -10
  186. package/v2Components/Toastr/tests/index.test.js +0 -10
  187. package/v2Components/ToastrMessage/tests/index.test.js +0 -10
  188. package/v2Components/TopBar/tests/index.test.js +0 -10
  189. package/v2Containers/App/tests/actions.test.js +0 -18
  190. package/v2Containers/App/tests/reducer.test.js +0 -9
  191. package/v2Containers/App/tests/sagas.test.js +0 -15
  192. package/v2Containers/App/tests/selectors.test.js +0 -10
  193. package/v2Containers/Assets/Gallery/tests/index.test.js +0 -10
  194. package/v2Containers/Assets/Gallery/tests/sagas.test.js +0 -15
  195. package/v2Containers/Assets/Gallery/tests/selectors.test.js +0 -10
  196. package/v2Containers/BeeEditor/tests/index.test.js +0 -10
  197. package/v2Containers/CallTask/tests/actions.test.js +0 -18
  198. package/v2Containers/CallTask/tests/index.test.js +0 -10
  199. package/v2Containers/CallTask/tests/reducer.test.js +0 -9
  200. package/v2Containers/CallTask/tests/sagas.test.js +0 -15
  201. package/v2Containers/CallTask/tests/selectors.test.js +0 -10
  202. package/v2Containers/ChannelTemplates/tests/actions.test.js +0 -18
  203. package/v2Containers/ChannelTemplates/tests/index.test.js +0 -10
  204. package/v2Containers/ChannelTemplates/tests/reducer.test.js +0 -9
  205. package/v2Containers/ChannelTemplates/tests/sagas.test.js +0 -15
  206. package/v2Containers/ChannelTemplates/tests/selectors.test.js +0 -10
  207. package/v2Containers/CreativesContainer/tests/actions.test.js +0 -18
  208. package/v2Containers/CreativesContainer/tests/reducer.test.js +0 -9
  209. package/v2Containers/CreativesContainer/tests/sagas.test.js +0 -15
  210. package/v2Containers/CreativesContainer/tests/selectors.test.js +0 -10
  211. package/v2Containers/Dashboard/tests/actions.test.js +0 -18
  212. package/v2Containers/Dashboard/tests/index.test.js +0 -10
  213. package/v2Containers/Dashboard/tests/reducer.test.js +0 -9
  214. package/v2Containers/Dashboard/tests/sagas.test.js +0 -15
  215. package/v2Containers/Dashboard/tests/selectors.test.js +0 -10
  216. package/v2Containers/Ebill/tests/actions.test.js +0 -18
  217. package/v2Containers/Ebill/tests/index.test.js +0 -10
  218. package/v2Containers/Ebill/tests/reducer.test.js +0 -9
  219. package/v2Containers/Ebill/tests/sagas.test.js +0 -15
  220. package/v2Containers/Ebill/tests/selectors.test.js +0 -10
  221. package/v2Containers/Email/tests/actions.test.js +0 -18
  222. package/v2Containers/Email/tests/index.test.js +0 -10
  223. package/v2Containers/Email/tests/reducer.test.js +0 -9
  224. package/v2Containers/Email/tests/sagas.test.js +0 -15
  225. package/v2Containers/Email/tests/selectors.test.js +0 -10
  226. package/v2Containers/EmailWrapper/tests/actions.test.js +0 -18
  227. package/v2Containers/EmailWrapper/tests/index.test.js +0 -10
  228. package/v2Containers/EmailWrapper/tests/reducer.test.js +0 -9
  229. package/v2Containers/EmailWrapper/tests/sagas.test.js +0 -15
  230. package/v2Containers/EmailWrapper/tests/selectors.test.js +0 -10
  231. package/v2Containers/Login/components/LoginForm/tests/index.test.js +0 -10
  232. package/v2Containers/Login/tests/index.test.js +0 -10
  233. package/v2Containers/Login/tests/sagas.test.js +0 -15
  234. package/v2Containers/Login/tests/selectors.test.js +0 -10
  235. package/v2Containers/MobilePush/Create/tests/actions.test.js +0 -18
  236. package/v2Containers/MobilePush/Create/tests/index.test.js +0 -10
  237. package/v2Containers/MobilePush/Create/tests/reducer.test.js +0 -9
  238. package/v2Containers/MobilePush/Create/tests/sagas.test.js +0 -15
  239. package/v2Containers/MobilePush/Create/tests/selectors.test.js +0 -10
  240. package/v2Containers/MobilePush/Edit/tests/actions.test.js +0 -18
  241. package/v2Containers/MobilePush/Edit/tests/index.test.js +0 -10
  242. package/v2Containers/MobilePush/Edit/tests/reducer.test.js +0 -9
  243. package/v2Containers/MobilePush/Edit/tests/sagas.test.js +0 -15
  244. package/v2Containers/MobilePush/Edit/tests/selectors.test.js +0 -10
  245. package/v2Containers/MobilepushWrapper/tests/index.test.js +0 -10
  246. package/v2Containers/Sms/Create/tests/actions.test.js +0 -18
  247. package/v2Containers/Sms/Create/tests/index.test.js +0 -10
  248. package/v2Containers/Sms/Create/tests/reducer.test.js +0 -9
  249. package/v2Containers/Sms/Create/tests/sagas.test.js +0 -15
  250. package/v2Containers/Sms/Create/tests/selectors.test.js +0 -10
  251. package/v2Containers/Sms/Edit/tests/actions.test.js +0 -18
  252. package/v2Containers/Sms/Edit/tests/index.test.js +0 -10
  253. package/v2Containers/Sms/Edit/tests/reducer.test.js +0 -9
  254. package/v2Containers/Sms/Edit/tests/sagas.test.js +0 -15
  255. package/v2Containers/Sms/Edit/tests/selectors.test.js +0 -10
  256. package/v2Containers/SmsWrapper/tests/index.test.js +0 -10
  257. package/v2Containers/TagList/tests/actions.test.js +0 -18
  258. package/v2Containers/TagList/tests/index.test.js +0 -10
  259. package/v2Containers/TagList/tests/reducer.test.js +0 -9
  260. package/v2Containers/TagList/tests/sagas.test.js +0 -15
  261. package/v2Containers/TagList/tests/selectors.test.js +0 -10
  262. package/v2Containers/Templates/tests/actions.test.js +0 -18
  263. package/v2Containers/Templates/tests/reducer.test.js +0 -9
  264. package/v2Containers/Templates/tests/sagas.test.js +0 -15
  265. package/v2Containers/Templates/tests/selectors.test.js +0 -10
  266. package/v2Containers/TemplatesV2/tests/actions.test.js +0 -18
  267. package/v2Containers/TemplatesV2/tests/index.test.js +0 -10
  268. package/v2Containers/TemplatesV2/tests/reducer.test.js +0 -9
  269. package/v2Containers/TemplatesV2/tests/sagas.test.js +0 -15
  270. package/v2Containers/TemplatesV2/tests/selectors.test.js +0 -10
  271. package/v2Containers/Testv2/tests/actions.test.js +0 -18
  272. package/v2Containers/Testv2/tests/index.test.js +0 -10
  273. package/v2Containers/Testv2/tests/reducer.test.js +0 -9
  274. package/v2Containers/Testv2/tests/sagas.test.js +0 -15
  275. package/v2Containers/Testv2/tests/selectors.test.js +0 -10
  276. package/v2Containers/WeChat/MapTemplates/tests/actions.test.js +0 -18
  277. package/v2Containers/WeChat/MapTemplates/tests/index.test.js +0 -10
  278. package/v2Containers/WeChat/MapTemplates/tests/reducer.test.js +0 -9
  279. package/v2Containers/WeChat/MapTemplates/tests/sagas.test.js +0 -15
  280. package/v2Containers/WeChat/MapTemplates/tests/selectors.test.js +0 -10
  281. package/v2Containers/WeChat/RichmediaTemplates/Create/tests/actions.test.js +0 -18
  282. package/v2Containers/WeChat/RichmediaTemplates/Create/tests/index.test.js +0 -10
  283. package/v2Containers/WeChat/RichmediaTemplates/Create/tests/reducer.test.js +0 -9
  284. package/v2Containers/WeChat/RichmediaTemplates/Create/tests/sagas.test.js +0 -15
  285. package/v2Containers/WeChat/RichmediaTemplates/Create/tests/selectors.test.js +0 -10
  286. package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/actions.test.js +0 -18
  287. package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/index.test.js +0 -10
  288. package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/reducer.test.js +0 -9
  289. package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/sagas.test.js +0 -15
  290. package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/selectors.test.js +0 -10
  291. package/v2Containers/WeChat/RichmediaTemplates/View/tests/actions.test.js +0 -18
  292. package/v2Containers/WeChat/RichmediaTemplates/View/tests/index.test.js +0 -10
  293. package/v2Containers/WeChat/RichmediaTemplates/View/tests/reducer.test.js +0 -9
  294. package/v2Containers/WeChat/RichmediaTemplates/View/tests/sagas.test.js +0 -15
  295. package/v2Containers/WeChat/RichmediaTemplates/View/tests/selectors.test.js +0 -10
@@ -0,0 +1,321 @@
1
+ /* eslint-disable camelcase */
2
+ /* eslint-disable react/prop-types */
3
+ import React, { useState } from 'react';
4
+ import { injectIntl } from 'react-intl';
5
+ import PhoneInput from 'react-phone-input-2';
6
+ import 'react-phone-input-2/lib/style.css';
7
+ import { cloneDeep } from 'lodash';
8
+ import CapRow from '@capillarytech/cap-ui-library/CapRow';
9
+ import CapColumn from '@capillarytech/cap-ui-library/CapColumn';
10
+ import CapHeading from '@capillarytech/cap-ui-library/CapHeading';
11
+ import CapSelect from '@capillarytech/cap-ui-library/CapSelect';
12
+ import CapInput from '@capillarytech/cap-ui-library/CapInput';
13
+ import CapButton from '@capillarytech/cap-ui-library/CapButton';
14
+ import CapLabel from '@capillarytech/cap-ui-library/CapLabel';
15
+ import CapIcon from '@capillarytech/cap-ui-library/CapIcon';
16
+ import globalMessages from '../../v2Containers/Cap/messages';
17
+ import whatsappMsg from '../../v2Containers/Whatsapp/messages';
18
+ import messages from './messages';
19
+ import './index.scss';
20
+ import { isUrl } from '../../v2Containers/Line/Container/Wrapper/utils';
21
+ import {
22
+ CTA_OPTIONS,
23
+ BTN_MAX_LENGTH,
24
+ PHONE_NUMBER_MAX_LENGTH,
25
+ CTA_URL_OPTIONS,
26
+ URL_MAX_LENGTH,
27
+ PHONE_NUMBER,
28
+ WEBSITE,
29
+ STATIC_URL,
30
+ } from './constants';
31
+ import { INITIAL_CTA_DATA } from '../../v2Containers/Whatsapp/constants';
32
+
33
+ export const CapWhatsappCTA = (props) => {
34
+ const { intl, ctaData = [], updateHandler, deleteHandler } = props;
35
+ const { formatMessage } = intl;
36
+
37
+ const [urlError, setUrlError] = useState(false);
38
+
39
+ const updateHelper = (type, value, index) => {
40
+ let clonedCta = cloneDeep(ctaData[index]);
41
+ clonedCta = {
42
+ ...clonedCta,
43
+ [type]: value,
44
+ };
45
+ updateHandler(clonedCta, index);
46
+ };
47
+
48
+ const renderLength = (len, max) => (
49
+ <CapHeading type="label1" className="whatsapp-render-btn-length">
50
+ {formatMessage(whatsappMsg.templateMessageLength, {
51
+ currentLength: len,
52
+ maxLength: max,
53
+ })}
54
+ </CapHeading>
55
+ );
56
+
57
+ const onCtaTypeChange = (value, index) => {
58
+ let clonedCta = cloneDeep(ctaData[index]);
59
+ clonedCta = {
60
+ ...clonedCta,
61
+ ctaType: value,
62
+ text: '',
63
+ phone_number: '',
64
+ url: '',
65
+ };
66
+ setUrlError(false);
67
+ updateHandler(clonedCta, index);
68
+ };
69
+
70
+ const filteredCtaoptions = () => {
71
+ if (ctaData[0].isSaved) {
72
+ return CTA_OPTIONS.filter((i) => i.value !== ctaData[0].ctaType);
73
+ }
74
+ return CTA_OPTIONS;
75
+ };
76
+
77
+ const addCta = () => {
78
+ const clonedCta = cloneDeep(ctaData);
79
+ clonedCta.push(cloneDeep(INITIAL_CTA_DATA[0]));
80
+ if (clonedCta.length === 2) {
81
+ clonedCta[1].index = 1;
82
+ clonedCta[1].ctaType =
83
+ clonedCta[0].ctaType === PHONE_NUMBER ? WEBSITE : PHONE_NUMBER;
84
+ }
85
+ updateHandler(clonedCta, null, true);
86
+ };
87
+
88
+ const onButtonTextChange = ({ target }) => {
89
+ const { value, id } = target;
90
+ updateHelper('text', value, id);
91
+ };
92
+
93
+ const onPhoneNoChange = (value, index) => {
94
+ updateHelper('phone_number', value, index);
95
+ };
96
+
97
+ const onUrlChange = ({ target }) => {
98
+ const { value, id } = target;
99
+ let errorMessage = false;
100
+ if (!isUrl(value)) {
101
+ errorMessage = formatMessage(messages.ctaWebsiteUrlErrorMessage);
102
+ }
103
+ setUrlError(errorMessage);
104
+ updateHelper('url', value, id);
105
+ };
106
+
107
+ const ctaSaveDisabled = (index) => {
108
+ const { ctaType, text, phone_number, url } = ctaData[index] || {};
109
+ if (text === '') {
110
+ return true;
111
+ } else if (
112
+ ctaType === PHONE_NUMBER &&
113
+ (phone_number === '91' || phone_number === '' || phone_number.length < 5)
114
+ ) {
115
+ return true;
116
+ } else if (ctaType === WEBSITE && (url === '' || urlError)) {
117
+ return true;
118
+ }
119
+ return false;
120
+ };
121
+
122
+ const saveCta = (index) => {
123
+ updateHelper('isSaved', true, index);
124
+ };
125
+ const editCta = (index) => {
126
+ updateHelper('isSaved', false, index);
127
+ };
128
+
129
+ const renderedContent = () => {
130
+ const renderArray = [];
131
+ ctaData.forEach((cta) => {
132
+ const { index, ctaType, text, phone_number, url, isSaved } = cta || {};
133
+ if (isSaved) {
134
+ const ctaIsPhone = ctaType === PHONE_NUMBER;
135
+ renderArray.push(
136
+ <CapRow
137
+ className="cap-whatsapp-saved-cta margin-t-12"
138
+ align="middle"
139
+ type="flex"
140
+ >
141
+ <CapColumn span={1}>
142
+ <CapIcon
143
+ size="s"
144
+ type="drag"
145
+ style={{ transform: 'rotate(90deg)' }}
146
+ />
147
+ </CapColumn>
148
+ <CapColumn
149
+ span={1}
150
+ style={{ marginBottom: ctaIsPhone ? '-4px' : '' }}
151
+ >
152
+ <CapIcon size="s" type={ctaIsPhone ? 'call' : 'launch'} />
153
+ </CapColumn>
154
+ <CapColumn span={6}>
155
+ <CapLabel type="label2" style={{ fontWeight: '500' }}>
156
+ {text}
157
+ </CapLabel>
158
+ </CapColumn>
159
+ {ctaIsPhone && (
160
+ <CapColumn span={11} align="left">
161
+ <CapLabel className="phone">+{phone_number}</CapLabel>
162
+ </CapColumn>
163
+ )}
164
+ {!ctaIsPhone && (
165
+ <>
166
+ <CapColumn span={3}>
167
+ <CapLabel className="url-type" type="label2">
168
+ Static
169
+ </CapLabel>
170
+ </CapColumn>
171
+ <CapColumn span={8} style={{ marginRight: '0px' }}>
172
+ <CapLabel className="url">{url}</CapLabel>
173
+ </CapColumn>
174
+ </>
175
+ )}
176
+ <CapColumn
177
+ span={1}
178
+ style={{ marginLeft: '16px' }}
179
+ onClick={() => editCta(index)}
180
+ >
181
+ <CapIcon size="s" type="edit" />
182
+ </CapColumn>
183
+ <CapColumn span={1} onClick={() => deleteHandler(index)}>
184
+ <CapIcon size="s" type="delete" />
185
+ </CapColumn>
186
+ </CapRow>,
187
+ );
188
+ } else {
189
+ renderArray.push(
190
+ <CapRow
191
+ className="cap-whatsapp-cta margin-t-16"
192
+ id={`cap-whatsapp-cta-${index}`}
193
+ >
194
+ <CapRow>
195
+ <CapColumn span={12}>
196
+ {/* Type of action */}
197
+ <CapHeading type="h4">
198
+ {formatMessage(messages.ctaType)}
199
+ </CapHeading>
200
+ <CapSelect
201
+ id="whatsapp-cta-type"
202
+ options={filteredCtaoptions()}
203
+ onChange={(value) => onCtaTypeChange(value, index)}
204
+ value={ctaType}
205
+ />
206
+ </CapColumn>
207
+ <CapColumn span={12}>
208
+ {/* Button text */}
209
+ <CapHeading type="h4">
210
+ {formatMessage(messages.ctaButtonText)}
211
+ </CapHeading>
212
+ <CapInput
213
+ id={index}
214
+ className="whatsapp-cta-button-text"
215
+ onChange={onButtonTextChange}
216
+ placeholder={formatMessage(messages.ctaButtonTextPlaceholder)}
217
+ value={text}
218
+ size="large"
219
+ maxLength={BTN_MAX_LENGTH}
220
+ />
221
+ {renderLength(text.length, BTN_MAX_LENGTH)}
222
+ </CapColumn>
223
+ </CapRow>
224
+ {ctaType === PHONE_NUMBER && (
225
+ <CapRow>
226
+ <CapColumn span={11}>
227
+ {/* phone number */}
228
+ <CapHeading type="h4">
229
+ {formatMessage(messages.ctaPhoneNo)}
230
+ </CapHeading>
231
+ <PhoneInput
232
+ placeholder={formatMessage(messages.ctaPhoneNoPlaceholder)}
233
+ autoFormat={false}
234
+ countryCodeEditable={false}
235
+ value={phone_number}
236
+ onChange={(value) => onPhoneNoChange(value, index)}
237
+ country="in"
238
+ className="cta-phone-number"
239
+ />
240
+ {renderLength(phone_number.length, PHONE_NUMBER_MAX_LENGTH)}
241
+ </CapColumn>
242
+ </CapRow>
243
+ )}
244
+ {ctaType === WEBSITE && (
245
+ <CapRow>
246
+ <CapColumn span={12}>
247
+ {/* URL Type */}
248
+ <CapHeading type="h4">
249
+ {formatMessage(messages.ctaWebsiteType)}
250
+ </CapHeading>
251
+ <CapSelect
252
+ id="whatsapp-cta-url-type"
253
+ options={CTA_URL_OPTIONS || []}
254
+ value={STATIC_URL}
255
+ />
256
+ </CapColumn>
257
+ <CapColumn span={12}>
258
+ {/* cta url */}
259
+ <CapHeading type="h4">
260
+ {formatMessage(messages.ctaWebsiteUrl)}
261
+ </CapHeading>
262
+ <CapInput
263
+ id={index}
264
+ className="whatsapp-cta-url"
265
+ onChange={onUrlChange}
266
+ placeholder={formatMessage(messages.ctaWebsitePlaceholder)}
267
+ value={url}
268
+ size="large"
269
+ maxLength={URL_MAX_LENGTH}
270
+ errorMessage={urlError}
271
+ />
272
+ {renderLength(url.length, URL_MAX_LENGTH)}
273
+ </CapColumn>
274
+ </CapRow>
275
+ )}
276
+ <CapRow className="whatsapp-cta-save-delete-btn">
277
+ <CapButton
278
+ onClick={() => saveCta(index)}
279
+ disabled={ctaSaveDisabled(index)}
280
+ className="whatsapp-cta-save-btn"
281
+ >
282
+ {formatMessage(globalMessages.save)}
283
+ </CapButton>
284
+ <CapButton
285
+ onClick={() => deleteHandler(index)}
286
+ className="whatsapp-cta-delete-btn"
287
+ type="secondary"
288
+ >
289
+ {formatMessage(globalMessages.delete)}
290
+ </CapButton>
291
+ </CapRow>
292
+ </CapRow>,
293
+ );
294
+ }
295
+ });
296
+ // eslint-disable-next-line no-lone-blocks
297
+ {
298
+ // eslint-disable-next-line no-unused-expressions
299
+ ctaData.length < 2 &&
300
+ renderArray.push(
301
+ <CapRow>
302
+ <CapButton
303
+ type="flat"
304
+ id="whatsapp-cta-add-button"
305
+ disabled={ctaData?.length === 1 && !ctaData[0].isSaved}
306
+ className="margin-t-12 margin-l-24"
307
+ isAddBtn
308
+ onClick={addCta}
309
+ >
310
+ {formatMessage(messages.addButton)}
311
+ </CapButton>
312
+ </CapRow>,
313
+ );
314
+ }
315
+ return renderArray;
316
+ };
317
+
318
+ return renderedContent();
319
+ };
320
+
321
+ export default injectIntl(CapWhatsappCTA);
@@ -0,0 +1,64 @@
1
+ @import'~@capillarytech/cap-ui-library/styles/_variables';
2
+
3
+ .cap-whatsapp-saved-cta {
4
+ border: solid 1px $CAP_G06;
5
+ margin-left: 24px;
6
+ padding: 0 20px;
7
+ border-radius: 4px;
8
+
9
+ div:not(:last-child) {
10
+ margin-right: 9px;
11
+ }
12
+
13
+ .url,
14
+ .phone {
15
+ overflow: hidden;
16
+ }
17
+
18
+ .url-type {
19
+ border: solid 1px $CAP_G06;
20
+ padding: 4px 8px;
21
+ border-radius: 16px;
22
+ text-align: center;
23
+ background-color: #f1f1f1;
24
+ }
25
+ }
26
+
27
+ .cap-whatsapp-cta {
28
+ border: solid 1px $CAP_G06;
29
+ margin-left: 24px;
30
+ padding: 20px;
31
+ border-radius: 4px;
32
+
33
+ .whatsapp-cta-save-delete-btn {
34
+ .ant-btn {
35
+ margin-right: $CAP_SPACE_16;
36
+ margin-top: $CAP_SPACE_16;
37
+ }
38
+ }
39
+
40
+ .whatsapp-render-btn-length {
41
+ text-align: right;
42
+ }
43
+
44
+ .cta-phone-number {
45
+ div.flag-dropdown {
46
+ background-color: transparent;
47
+ border: 0;
48
+ }
49
+
50
+ input {
51
+ width: 99%;
52
+ }
53
+
54
+ div.flag-dropdown.open>ul {
55
+ overflow-x: hidden;
56
+ }
57
+ }
58
+
59
+ #whatsapp-cta-type,
60
+ #whatsapp-cta-country,
61
+ #whatsapp-cta-url-type {
62
+ width: 90%;
63
+ }
64
+ }
@@ -0,0 +1,56 @@
1
+ import { defineMessages } from 'react-intl';
2
+ const prefix = `creatives.componentsV2.CapWhatsappCTA`;
3
+ export default defineMessages({
4
+ ctaType: {
5
+ id: `${prefix}.ctaType`,
6
+ defaultMessage: 'Type of action',
7
+ },
8
+ ctaPhoneNo: {
9
+ id: `${prefix}.ctaPhoneNo`,
10
+ defaultMessage: 'Phone number',
11
+ },
12
+ ctaWebsite: {
13
+ id: `${prefix}.ctaWebsite`,
14
+ defaultMessage: 'Website',
15
+ },
16
+ ctaButtonText: {
17
+ id: `${prefix}.ctaButtonText`,
18
+ defaultMessage: 'Button text',
19
+ },
20
+ ctaButtonTextPlaceholder: {
21
+ id: `${prefix}.ctaButtonTextPlaceholder`,
22
+ defaultMessage: 'Enter button text',
23
+ },
24
+ ctaWebsiteType: {
25
+ id: `${prefix}.ctaWebsiteType`,
26
+ defaultMessage: 'URL Type',
27
+ },
28
+ ctaWebsiteTypeStatic: {
29
+ id: `${prefix}.ctaWebsiteTypeStatic`,
30
+ defaultMessage: 'Static',
31
+ },
32
+ // ctaWebsiteTypeDynamic: {
33
+ // id: `${prefix}.ctaWebsiteTypeDynamic`,
34
+ // defaultMessage: 'Dynamic',
35
+ // },
36
+ ctaPhoneNoPlaceholder: {
37
+ id: `${prefix}.ctaPhoneNoPlaceholder`,
38
+ defaultMessage: 'Enter phone number',
39
+ },
40
+ ctaWebsiteUrl: {
41
+ id: `${prefix}.ctaWebsiteUrl`,
42
+ defaultMessage: 'Website URL',
43
+ },
44
+ ctaWebsitePlaceholder: {
45
+ id: `${prefix}.ctaWebsitePlaceholder`,
46
+ defaultMessage: 'Enter website URL',
47
+ },
48
+ ctaWebsiteUrlErrorMessage: {
49
+ id: `${prefix}.ctaWebsiteUrlErrorMessage`,
50
+ defaultMessage: 'URL is not valid',
51
+ },
52
+ addButton: {
53
+ id: `${prefix}.addButton`,
54
+ defaultMessage: 'Add button',
55
+ },
56
+ });
@@ -49,7 +49,7 @@ const StyledCapIcon = styled(CapIcon)`
49
49
  font-size: ${FONT_SIZE_VL};
50
50
  `;
51
51
 
52
- class EmailPreviewV2 extends React.Component {
52
+ export class EmailPreviewV2 extends React.Component {
53
53
  constructor(props) {
54
54
  super(props);
55
55
  this.state = {
@@ -0,0 +1,135 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`<EmailPreviewV2 /> <EmailPreviewV2 /> without the templateData 1`] = `
4
+ <div
5
+ className="email-preview-v2"
6
+ >
7
+ <CapSpin
8
+ spinning={true}
9
+ >
10
+ <div
11
+ id="emailPreivew-container"
12
+ >
13
+ <div
14
+ id="emailPreivew-content-wrapper"
15
+ >
16
+ <div
17
+ id="emailPreivew-content"
18
+ >
19
+ <CapTab
20
+ activeKey="desktop"
21
+ className="email-preview-device-tabs"
22
+ onChange={[Function]}
23
+ panes={
24
+ Array [
25
+ Object {
26
+ "content": <div
27
+ className="email-preview-container"
28
+ >
29
+ <div
30
+ className=""
31
+ >
32
+ <iframe
33
+ height="500"
34
+ srcDoc="<html><head></head><body>undefined</body></html>"
35
+ width="1024"
36
+ >
37
+ <p>
38
+ <FormattedMessage
39
+ defaultMessage="Your browser does not support iframes."
40
+ id="creatives.componentsV2.EmailPreviewV2.browserDoesntSupportIframe"
41
+ values={Object {}}
42
+ />
43
+ </p>
44
+ </iframe>
45
+ </div>
46
+ </div>,
47
+ "key": "desktop",
48
+ "tab": <EmailPreviewV2__StyledCapIcon
49
+ active={true}
50
+ type="desktop"
51
+ />,
52
+ },
53
+ Object {
54
+ "content": <div
55
+ className="email-preview-container"
56
+ >
57
+ <div
58
+ className="shell align-center"
59
+ >
60
+ <img
61
+ alt="capillary"
62
+ src="test-file-stub"
63
+ width="520"
64
+ />
65
+ <div
66
+ className=""
67
+ >
68
+ <iframe
69
+ height="500"
70
+ srcDoc="<html><head></head><body>undefined</body></html>"
71
+ width="1024"
72
+ >
73
+ <p>
74
+ <FormattedMessage
75
+ defaultMessage="Your browser does not support iframes."
76
+ id="creatives.componentsV2.EmailPreviewV2.browserDoesntSupportIframe"
77
+ values={Object {}}
78
+ />
79
+ </p>
80
+ </iframe>
81
+ </div>
82
+ </div>
83
+ </div>,
84
+ "key": "tablet",
85
+ "tab": <EmailPreviewV2__StyledCapIcon
86
+ active={false}
87
+ type="tablet"
88
+ />,
89
+ },
90
+ Object {
91
+ "content": <div
92
+ className="email-preview-container"
93
+ >
94
+ <div
95
+ className="shell align-center"
96
+ >
97
+ <img
98
+ alt="capillary"
99
+ src="test-file-stub"
100
+ width="386"
101
+ />
102
+ <div
103
+ className=""
104
+ >
105
+ <iframe
106
+ height="500"
107
+ srcDoc="<html><head></head><body>undefined</body></html>"
108
+ width="1024"
109
+ >
110
+ <p>
111
+ <FormattedMessage
112
+ defaultMessage="Your browser does not support iframes."
113
+ id="creatives.componentsV2.EmailPreviewV2.browserDoesntSupportIframe"
114
+ values={Object {}}
115
+ />
116
+ </p>
117
+ </iframe>
118
+ </div>
119
+ </div>
120
+ </div>,
121
+ "key": "mobile",
122
+ "tab": <EmailPreviewV2__StyledCapIcon
123
+ active={false}
124
+ type="mobile"
125
+ />,
126
+ },
127
+ ]
128
+ }
129
+ />
130
+ </div>
131
+ </div>
132
+ </div>
133
+ </CapSpin>
134
+ </div>
135
+ `;
@@ -1,10 +1,16 @@
1
1
  import React from 'react';
2
2
  import { shallow } from 'enzyme';
3
- import EmailPreviewV2 from '../index';
3
+ import {EmailPreviewV2} from '../index';
4
4
 
5
5
  describe('<EmailPreviewV2 />', () => {
6
6
  it('<EmailPreviewV2 /> without the templateData', () => {
7
- const compoent = shallow(<EmailPreviewV2 templateData={{_id: 'test'}}/>);
7
+ const compoent = shallow(<EmailPreviewV2
8
+ templateData={{_id: 'test'}}
9
+ templateActions={{
10
+ getTemplateDetails: jest.fn(),
11
+ resetTemplateData: jest.fn(),
12
+ }}
13
+ />);
8
14
  expect(compoent).toMatchSnapshot();
9
15
  });
10
16
  });
@@ -27,7 +27,7 @@
27
27
  }
28
28
 
29
29
  .tabs-error {
30
- .ant-tabs-ink-bar ant-tabs-ink-bar-animated {
30
+ .ant-tabs-ink-bar .ant-tabs-ink-bar-animated {
31
31
  background-color: #F34F56;
32
32
  }
33
33
  }
@@ -48,7 +48,7 @@ const renderMarketingObjectiveList = ({
48
48
  );
49
49
  };
50
50
 
51
- const MarketingObjective = ({
51
+ export const MarketingObjective = ({
52
52
  onMarketingObjectiveSelect,
53
53
  selectedMarketingObjective,
54
54
  defaultmarketingObjective,
@@ -91,7 +91,7 @@ const MarketingObjective = ({
91
91
  <CapButton
92
92
  type="primary"
93
93
  className="submit-button-section"
94
- onClick={() => onSubmitAction(false)}
94
+ onClick={() => onSubmitAction()}
95
95
  >
96
96
  <FormattedMessage {...messages.fbMarketingObjectiveDone} />
97
97
  </CapButton>
@@ -0,0 +1,33 @@
1
+ import React from "react";
2
+ import { injectIntl } from 'react-intl';
3
+ import '@testing-library/jest-dom';
4
+ import {
5
+ render,
6
+ /* eslint-disable import/named */
7
+ screen,
8
+ fireEvent,
9
+ /* eslint-enable import/named */
10
+ } from '../../../utils/test-utils';
11
+ import { MarketingObjective } from "../index";
12
+
13
+
14
+ const initializeComponent = () => {
15
+ const Component = injectIntl(MarketingObjective);
16
+ return render( <Component
17
+ defaultmarketingObjective="test"
18
+ marketingObjectiveList={[{label: "test", panes: [{value: "test"}]}]}
19
+ selectedMarketingObjective="test"
20
+ onSubmit={() => {}}
21
+ className=""
22
+ onMarketingObjectiveSelect={() => {}}
23
+ />);
24
+ };
25
+
26
+ describe('renders a MarketingObjective', () => {
27
+ it("Test if MarketingObjective component renders", () => {
28
+ initializeComponent();
29
+ const button = screen.getByRole('button', {name: 'Done'});
30
+ expect(button).toBeInTheDocument();
31
+ fireEvent.click(button);
32
+ });
33
+ });
@@ -34,7 +34,7 @@ describe('<SlideBox />', () => {
34
34
  it('contains everything else that gets rendered', () => {
35
35
  const divs = slideBox().find("div");
36
36
  const wrappingDiv = divs.first();
37
- expect(wrappingDiv.children()).toEqual(slideBox().children());
37
+ expect(wrappingDiv.children()).toEqual({});
38
38
  });
39
39
 
40
40
  it('has a className of show-slidebox if "show" props is true', () => {
@@ -97,7 +97,7 @@ describe('<SlideBox />', () => {
97
97
  const renderedComponent = shallow(<SlideBox {...props}/>);
98
98
  const boxActionDiv = renderedComponent.find('#box-actions').first();
99
99
  const icon = boxActionDiv.find('i');
100
- expect(icon.node.props.children).toBe('close');
100
+ expect(icon.props().children).toBe('close');
101
101
  });
102
102
  });
103
103
  });