@capillarytech/creatives-library 2.0.70 → 2.0.72

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 (395) hide show
  1. package/app.js +1 -1
  2. package/components/Ckeditor/index.js +2 -1
  3. package/components/EmailMobilePreview/index.scss +0 -1
  4. package/components/EmailPreviewV2/_emailPreviewV2.scss +4 -1
  5. package/components/EmailPreviewV2/index.js +1 -1
  6. package/components/FormBuilder/index.js +25 -10
  7. package/components/Header/index.js +3 -1
  8. package/components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +38 -3
  9. package/components/TemplatePreview/index.js +45 -51
  10. package/components/TemplatePreview/messages.js +1 -1
  11. package/config/app.js +1 -0
  12. package/containers/Cap/actions.js +0 -5
  13. package/containers/Cap/reducer.js +1 -1
  14. package/containers/Cap/selectors.js +0 -13
  15. package/containers/Ebill/index.js +1 -2
  16. package/containers/Email/_email.scss +1 -0
  17. package/containers/Email/actions.js +3 -8
  18. package/containers/Email/constants.js +0 -1
  19. package/containers/Email/index.js +947 -322
  20. package/containers/Email/reducer.js +0 -3
  21. package/containers/Email/sagas.js +6 -3
  22. package/containers/Email/selectors.js +1 -4
  23. package/containers/Line/Create/index.js +1 -2
  24. package/containers/Line/Edit/_lineEdit.scss +4 -0
  25. package/containers/Line/Edit/index.js +1 -3
  26. package/containers/MobilePush/Create/_mobilePushCreate.scss +3 -12
  27. package/containers/MobilePush/Create/actions.js +0 -6
  28. package/containers/MobilePush/Create/constants.js +0 -1
  29. package/containers/MobilePush/Create/index.js +1133 -628
  30. package/containers/MobilePush/Create/messages.js +1 -5
  31. package/containers/MobilePush/Create/reducer.js +0 -2
  32. package/containers/MobilePush/Create/selectors.js +3 -3
  33. package/containers/MobilePush/Edit/_mobilePushCreate.scss +3 -9
  34. package/containers/MobilePush/Edit/index.js +1127 -393
  35. package/containers/MobilePush/Edit/messages.js +0 -4
  36. package/containers/MobilePush/Edit/reducer.js +1 -2
  37. package/containers/MobilePush/Edit/selectors.js +3 -6
  38. package/containers/Sms/Create/_smsCreate.scss +2 -1
  39. package/containers/Sms/Create/actions.js +4 -4
  40. package/containers/Sms/Create/index.js +570 -102
  41. package/containers/Sms/Create/sagas.js +2 -1
  42. package/containers/Sms/Edit/actions.js +5 -10
  43. package/containers/Sms/Edit/constants.js +0 -1
  44. package/containers/Sms/Edit/index.js +548 -103
  45. package/containers/Sms/Edit/reducer.js +0 -2
  46. package/containers/Sms/Edit/sagas.js +3 -1
  47. package/containers/TagList/index.js +3 -3
  48. package/containers/Templates/actions.js +1 -3
  49. package/containers/Templates/index.js +299 -268
  50. package/containers/Templates/messages.js +90 -122
  51. package/containers/Templates/reducer.js +3 -3
  52. package/containers/Templates/sagas.js +1 -5
  53. package/containers/Templates/selectors.js +1 -41
  54. package/containers/WeChat/MapTemplates/index.js +3 -4
  55. package/containers/WeChat/RichmediaTemplates/Create/index.js +18 -4
  56. package/containers/WeChat/RichmediaTemplates/Create/messages.js +4 -0
  57. package/containers/WeChat/RichmediaTemplates/Edit/index.js +3 -1
  58. package/containers/WeChat/RichmediaTemplates/View/index.js +3 -1
  59. package/index.js +31 -31
  60. package/initialState.js +6 -0
  61. package/package.json +3 -3
  62. package/routes.js +24 -19
  63. package/services/api.js +6 -2
  64. package/services/getSchema.js +18 -0
  65. package/v2Containers/App/actions.js +7 -0
  66. package/v2Containers/App/constants.js +3 -0
  67. package/v2Containers/App/reducer.js +19 -0
  68. package/v2Containers/App/sagas.js +26 -0
  69. package/v2Containers/App/selectors.js +25 -0
  70. package/v2Containers/App/tests/actions.test.js +18 -0
  71. package/v2Containers/App/tests/reducer.test.js +9 -0
  72. package/v2Containers/App/tests/sagas.test.js +15 -0
  73. package/v2Containers/App/tests/selectors.test.js +10 -0
  74. package/v2Containers/Assets/Gallery/_gallery.scss +0 -0
  75. package/v2Containers/Assets/Gallery/actions.js +37 -0
  76. package/v2Containers/Assets/Gallery/constants.js +23 -0
  77. package/v2Containers/Assets/Gallery/index.js +479 -0
  78. package/v2Containers/Assets/Gallery/messages.js +97 -0
  79. package/v2Containers/Assets/Gallery/reducer.js +81 -0
  80. package/v2Containers/Assets/Gallery/sagas.js +84 -0
  81. package/v2Containers/Assets/Gallery/selectors.js +25 -0
  82. package/v2Containers/Assets/Gallery/tests/__snapshots__/reducer.test.js.snap +7 -0
  83. package/v2Containers/Assets/Gallery/tests/actions.test.js +26 -0
  84. package/v2Containers/Assets/Gallery/tests/index.test.js +10 -0
  85. package/v2Containers/Assets/Gallery/tests/reducer.test.js +95 -0
  86. package/v2Containers/Assets/Gallery/tests/sagas.test.js +15 -0
  87. package/v2Containers/Assets/Gallery/tests/selectors.test.js +10 -0
  88. package/v2Containers/CallTask/_callTask.scss +5 -0
  89. package/v2Containers/CallTask/actions.js +15 -0
  90. package/v2Containers/CallTask/constants.js +7 -0
  91. package/v2Containers/CallTask/index.js +141 -0
  92. package/v2Containers/CallTask/messages.js +21 -0
  93. package/v2Containers/CallTask/reducer.js +23 -0
  94. package/v2Containers/CallTask/sagas.js +11 -0
  95. package/v2Containers/CallTask/selectors.js +25 -0
  96. package/v2Containers/CallTask/tests/actions.test.js +18 -0
  97. package/v2Containers/CallTask/tests/index.test.js +10 -0
  98. package/v2Containers/CallTask/tests/reducer.test.js +9 -0
  99. package/v2Containers/CallTask/tests/sagas.test.js +15 -0
  100. package/v2Containers/CallTask/tests/selectors.test.js +10 -0
  101. package/v2Containers/Cap/actions.js +64 -0
  102. package/v2Containers/Cap/constants.js +24 -0
  103. package/v2Containers/Cap/index.js +349 -0
  104. package/v2Containers/Cap/messsages.js +63 -0
  105. package/v2Containers/Cap/reducer.js +111 -0
  106. package/v2Containers/Cap/sagas.js +143 -0
  107. package/v2Containers/Cap/selectors.js +85 -0
  108. package/v2Containers/Cap/tests/index.test.js +16 -0
  109. package/v2Containers/Cap/tests/selectors.test.js +28 -0
  110. package/v2Containers/ChannelTemplates/actions.js +20 -0
  111. package/v2Containers/ChannelTemplates/constants.js +8 -0
  112. package/v2Containers/ChannelTemplates/index.js +48 -0
  113. package/v2Containers/ChannelTemplates/messages.js +13 -0
  114. package/v2Containers/ChannelTemplates/reducer.js +34 -0
  115. package/v2Containers/ChannelTemplates/sagas.js +32 -0
  116. package/v2Containers/ChannelTemplates/selectors.js +25 -0
  117. package/v2Containers/ChannelTemplates/tests/actions.test.js +18 -0
  118. package/v2Containers/ChannelTemplates/tests/index.test.js +10 -0
  119. package/v2Containers/ChannelTemplates/tests/reducer.test.js +9 -0
  120. package/v2Containers/ChannelTemplates/tests/sagas.test.js +15 -0
  121. package/v2Containers/ChannelTemplates/tests/selectors.test.js +10 -0
  122. package/v2Containers/CreativesContainer/SlideBoxContent.js +257 -0
  123. package/v2Containers/CreativesContainer/SlideBoxFooter.js +45 -0
  124. package/v2Containers/CreativesContainer/SlideBoxHeader.js +70 -0
  125. package/v2Containers/CreativesContainer/actions.js +27 -0
  126. package/v2Containers/CreativesContainer/constants.js +16 -0
  127. package/v2Containers/CreativesContainer/index.js +483 -0
  128. package/v2Containers/CreativesContainer/index.scss +27 -0
  129. package/v2Containers/CreativesContainer/messages.js +293 -0
  130. package/v2Containers/CreativesContainer/reducer.js +29 -0
  131. package/v2Containers/CreativesContainer/sagas.js +11 -0
  132. package/v2Containers/CreativesContainer/selectors.js +30 -0
  133. package/v2Containers/CreativesContainer/tests/actions.test.js +18 -0
  134. package/v2Containers/CreativesContainer/tests/index.test.js +10 -0
  135. package/v2Containers/CreativesContainer/tests/reducer.test.js +9 -0
  136. package/v2Containers/CreativesContainer/tests/sagas.test.js +15 -0
  137. package/v2Containers/CreativesContainer/tests/selectors.test.js +10 -0
  138. package/v2Containers/Dashboard/actions.js +15 -0
  139. package/v2Containers/Dashboard/constants.js +7 -0
  140. package/v2Containers/Dashboard/index.js +54 -0
  141. package/v2Containers/Dashboard/messages.js +13 -0
  142. package/v2Containers/Dashboard/reducer.js +21 -0
  143. package/v2Containers/Dashboard/sagas.js +11 -0
  144. package/v2Containers/Dashboard/selectors.js +25 -0
  145. package/v2Containers/Dashboard/tests/actions.test.js +18 -0
  146. package/v2Containers/Dashboard/tests/index.test.js +10 -0
  147. package/v2Containers/Dashboard/tests/reducer.test.js +9 -0
  148. package/v2Containers/Dashboard/tests/sagas.test.js +15 -0
  149. package/v2Containers/Dashboard/tests/selectors.test.js +10 -0
  150. package/v2Containers/Ebill/_ebill.scss +5 -0
  151. package/v2Containers/Ebill/actions.js +43 -0
  152. package/v2Containers/Ebill/constants.js +20 -0
  153. package/v2Containers/Ebill/index.js +1261 -0
  154. package/v2Containers/Ebill/messages.js +73 -0
  155. package/v2Containers/Ebill/reducer.js +72 -0
  156. package/v2Containers/Ebill/sagas.js +65 -0
  157. package/v2Containers/Ebill/selectors.js +25 -0
  158. package/v2Containers/Ebill/tests/actions.test.js +18 -0
  159. package/v2Containers/Ebill/tests/index.test.js +10 -0
  160. package/v2Containers/Ebill/tests/reducer.test.js +9 -0
  161. package/v2Containers/Ebill/tests/sagas.test.js +15 -0
  162. package/v2Containers/Ebill/tests/selectors.test.js +10 -0
  163. package/v2Containers/Email/_email.scss +140 -0
  164. package/v2Containers/Email/actions.js +86 -0
  165. package/v2Containers/Email/constants.js +37 -0
  166. package/v2Containers/Email/index.js +2703 -0
  167. package/v2Containers/Email/initialSchema.js +540 -0
  168. package/v2Containers/Email/messages.js +237 -0
  169. package/v2Containers/Email/reducer.js +147 -0
  170. package/v2Containers/Email/sagas.js +133 -0
  171. package/v2Containers/Email/selectors.js +34 -0
  172. package/v2Containers/Email/tests/actions.test.js +18 -0
  173. package/v2Containers/Email/tests/index.test.js +10 -0
  174. package/v2Containers/Email/tests/reducer.test.js +9 -0
  175. package/v2Containers/Email/tests/sagas.test.js +15 -0
  176. package/v2Containers/Email/tests/selectors.test.js +10 -0
  177. package/v2Containers/EmailWrapper/actions.js +15 -0
  178. package/v2Containers/EmailWrapper/constants.js +7 -0
  179. package/v2Containers/EmailWrapper/index.js +258 -0
  180. package/v2Containers/EmailWrapper/messages.js +57 -0
  181. package/v2Containers/EmailWrapper/reducer.js +23 -0
  182. package/v2Containers/EmailWrapper/sagas.js +11 -0
  183. package/v2Containers/EmailWrapper/selectors.js +25 -0
  184. package/v2Containers/EmailWrapper/tests/actions.test.js +18 -0
  185. package/v2Containers/EmailWrapper/tests/index.test.js +10 -0
  186. package/v2Containers/EmailWrapper/tests/reducer.test.js +9 -0
  187. package/v2Containers/EmailWrapper/tests/sagas.test.js +15 -0
  188. package/v2Containers/EmailWrapper/tests/selectors.test.js +10 -0
  189. package/v2Containers/LanguageProvider/actions.js +17 -0
  190. package/v2Containers/LanguageProvider/constants.js +8 -0
  191. package/v2Containers/LanguageProvider/index.js +46 -0
  192. package/v2Containers/LanguageProvider/reducer.js +30 -0
  193. package/v2Containers/LanguageProvider/selectors.js +20 -0
  194. package/v2Containers/LanguageProvider/tests/actions.test.js +19 -0
  195. package/v2Containers/LanguageProvider/tests/index.test.js +49 -0
  196. package/v2Containers/LanguageProvider/tests/reducer.test.js +20 -0
  197. package/v2Containers/LanguageProvider/tests/selectors.test.js +15 -0
  198. package/v2Containers/Line/Create/_lineCreate.scss +43 -0
  199. package/v2Containers/Line/Create/actions.js +90 -0
  200. package/v2Containers/Line/Create/constants.js +39 -0
  201. package/v2Containers/Line/Create/index.js +822 -0
  202. package/v2Containers/Line/Create/messages.js +173 -0
  203. package/v2Containers/Line/Create/reducer.js +99 -0
  204. package/v2Containers/Line/Create/sagas.js +107 -0
  205. package/v2Containers/Line/Create/selectors.js +36 -0
  206. package/v2Containers/Line/Edit/_lineEdit.scss +21 -0
  207. package/v2Containers/Line/Edit/actions.js +79 -0
  208. package/v2Containers/Line/Edit/constants.js +27 -0
  209. package/v2Containers/Line/Edit/index.js +1050 -0
  210. package/v2Containers/Line/Edit/messages.js +157 -0
  211. package/v2Containers/Line/Edit/reducer.js +83 -0
  212. package/v2Containers/Line/Edit/sagas.js +81 -0
  213. package/v2Containers/Line/Edit/selectors.js +29 -0
  214. package/v2Containers/Line/Edit/tests/actions.test.js +18 -0
  215. package/v2Containers/Line/Edit/tests/index.test.js +10 -0
  216. package/v2Containers/Line/Edit/tests/reducer.test.js +9 -0
  217. package/v2Containers/Line/Edit/tests/sagas.test.js +15 -0
  218. package/v2Containers/Line/Edit/tests/selectors.test.js +10 -0
  219. package/v2Containers/Login/assets/images/capillary_logo.png +0 -0
  220. package/v2Containers/Login/components/LoginForm/index.js +59 -0
  221. package/v2Containers/Login/components/LoginForm/messages.js +21 -0
  222. package/v2Containers/Login/components/LoginForm/tests/index.test.js +10 -0
  223. package/v2Containers/Login/index.js +106 -0
  224. package/v2Containers/Login/messages.js +21 -0
  225. package/v2Containers/Login/selectors.js +25 -0
  226. package/v2Containers/Login/tests/index.test.js +10 -0
  227. package/v2Containers/Login/tests/sagas.test.js +15 -0
  228. package/v2Containers/Login/tests/selectors.test.js +10 -0
  229. package/v2Containers/MobilePush/Create/_mobilePushCreate.scss +41 -0
  230. package/v2Containers/MobilePush/Create/actions.js +52 -0
  231. package/v2Containers/MobilePush/Create/constants.js +24 -0
  232. package/v2Containers/MobilePush/Create/index.js +1759 -0
  233. package/v2Containers/MobilePush/Create/messages.js +237 -0
  234. package/v2Containers/MobilePush/Create/reducer.js +72 -0
  235. package/v2Containers/MobilePush/Create/sagas.js +60 -0
  236. package/v2Containers/MobilePush/Create/selectors.js +28 -0
  237. package/v2Containers/MobilePush/Create/tests/actions.test.js +18 -0
  238. package/v2Containers/MobilePush/Create/tests/index.test.js +10 -0
  239. package/v2Containers/MobilePush/Create/tests/reducer.test.js +9 -0
  240. package/v2Containers/MobilePush/Create/tests/sagas.test.js +15 -0
  241. package/v2Containers/MobilePush/Create/tests/selectors.test.js +10 -0
  242. package/v2Containers/MobilePush/Edit/_mobilePushCreate.scss +38 -0
  243. package/v2Containers/MobilePush/Edit/actions.js +91 -0
  244. package/v2Containers/MobilePush/Edit/constants.js +35 -0
  245. package/v2Containers/MobilePush/Edit/index.js +1851 -0
  246. package/v2Containers/MobilePush/Edit/messages.js +253 -0
  247. package/v2Containers/MobilePush/Edit/reducer.js +113 -0
  248. package/v2Containers/MobilePush/Edit/sagas.js +119 -0
  249. package/v2Containers/MobilePush/Edit/selectors.js +32 -0
  250. package/v2Containers/MobilePush/Edit/tests/actions.test.js +18 -0
  251. package/v2Containers/MobilePush/Edit/tests/index.test.js +10 -0
  252. package/v2Containers/MobilePush/Edit/tests/reducer.test.js +9 -0
  253. package/v2Containers/MobilePush/Edit/tests/sagas.test.js +15 -0
  254. package/v2Containers/MobilePush/Edit/tests/selectors.test.js +10 -0
  255. package/v2Containers/MobilePush/commonMethods.js +249 -0
  256. package/v2Containers/MobilePush/eventsMap.js +127 -0
  257. package/v2Containers/MobilePush/initialSchema.js +1739 -0
  258. package/v2Containers/MobilepushWrapper/_mobilepushWrapper.scss +18 -0
  259. package/v2Containers/MobilepushWrapper/index.js +136 -0
  260. package/v2Containers/MobilepushWrapper/messages.js +29 -0
  261. package/v2Containers/MobilepushWrapper/tests/index.test.js +10 -0
  262. package/v2Containers/NotFoundPage/index.js +25 -0
  263. package/v2Containers/NotFoundPage/messages.js +13 -0
  264. package/v2Containers/NotFoundPage/tests/index.test.js +17 -0
  265. package/v2Containers/Sms/Create/_smsCreate.scss +58 -0
  266. package/v2Containers/Sms/Create/actions.js +27 -0
  267. package/v2Containers/Sms/Create/constants.js +16 -0
  268. package/v2Containers/Sms/Create/index.js +1017 -0
  269. package/v2Containers/Sms/Create/messages.js +85 -0
  270. package/v2Containers/Sms/Create/reducer.js +41 -0
  271. package/v2Containers/Sms/Create/sagas.js +35 -0
  272. package/v2Containers/Sms/Create/selectors.js +28 -0
  273. package/v2Containers/Sms/Create/tests/actions.test.js +18 -0
  274. package/v2Containers/Sms/Create/tests/index.test.js +10 -0
  275. package/v2Containers/Sms/Create/tests/reducer.test.js +9 -0
  276. package/v2Containers/Sms/Create/tests/sagas.test.js +15 -0
  277. package/v2Containers/Sms/Create/tests/selectors.test.js +10 -0
  278. package/v2Containers/Sms/Edit/actions.js +45 -0
  279. package/v2Containers/Sms/Edit/constants.js +18 -0
  280. package/v2Containers/Sms/Edit/index.js +1018 -0
  281. package/v2Containers/Sms/Edit/messages.js +89 -0
  282. package/v2Containers/Sms/Edit/reducer.js +52 -0
  283. package/v2Containers/Sms/Edit/sagas.js +50 -0
  284. package/v2Containers/Sms/Edit/selectors.js +32 -0
  285. package/v2Containers/Sms/Edit/tests/actions.test.js +18 -0
  286. package/v2Containers/Sms/Edit/tests/index.test.js +10 -0
  287. package/v2Containers/Sms/Edit/tests/reducer.test.js +9 -0
  288. package/v2Containers/Sms/Edit/tests/sagas.test.js +15 -0
  289. package/v2Containers/Sms/Edit/tests/selectors.test.js +10 -0
  290. package/v2Containers/Sms/initialSchema.js +281 -0
  291. package/v2Containers/TagList/_tagList.scss +8 -0
  292. package/v2Containers/TagList/actions.js +15 -0
  293. package/v2Containers/TagList/constants.js +7 -0
  294. package/v2Containers/TagList/index.js +236 -0
  295. package/v2Containers/TagList/messages.js +13 -0
  296. package/v2Containers/TagList/reducer.js +23 -0
  297. package/v2Containers/TagList/sagas.js +11 -0
  298. package/v2Containers/TagList/selectors.js +25 -0
  299. package/v2Containers/TagList/tests/actions.test.js +18 -0
  300. package/v2Containers/TagList/tests/index.test.js +10 -0
  301. package/v2Containers/TagList/tests/reducer.test.js +9 -0
  302. package/v2Containers/TagList/tests/sagas.test.js +15 -0
  303. package/v2Containers/TagList/tests/selectors.test.js +10 -0
  304. package/v2Containers/Templates/_templates.scss +349 -0
  305. package/v2Containers/Templates/actions.js +110 -0
  306. package/v2Containers/Templates/constants.js +45 -0
  307. package/v2Containers/Templates/index.js +1725 -0
  308. package/v2Containers/Templates/messages.js +278 -0
  309. package/v2Containers/Templates/reducer.js +142 -0
  310. package/v2Containers/Templates/sagas.js +180 -0
  311. package/v2Containers/Templates/selectors.js +68 -0
  312. package/v2Containers/Templates/tests/actions.test.js +18 -0
  313. package/v2Containers/Templates/tests/index.test.js +10 -0
  314. package/v2Containers/Templates/tests/reducer.test.js +9 -0
  315. package/v2Containers/Templates/tests/sagas.test.js +15 -0
  316. package/v2Containers/Templates/tests/selectors.test.js +10 -0
  317. package/v2Containers/TemplatesV2/_templatesV2.scss +5 -0
  318. package/v2Containers/TemplatesV2/actions.js +16 -0
  319. package/v2Containers/TemplatesV2/constants.js +10 -0
  320. package/v2Containers/TemplatesV2/index.js +217 -0
  321. package/v2Containers/TemplatesV2/messages.js +29 -0
  322. package/v2Containers/TemplatesV2/selectors.js +25 -0
  323. package/v2Containers/TemplatesV2/tests/actions.test.js +18 -0
  324. package/v2Containers/TemplatesV2/tests/index.test.js +10 -0
  325. package/v2Containers/TemplatesV2/tests/reducer.test.js +9 -0
  326. package/v2Containers/TemplatesV2/tests/sagas.test.js +15 -0
  327. package/v2Containers/TemplatesV2/tests/selectors.test.js +10 -0
  328. package/v2Containers/TestPage/constants.js +7 -0
  329. package/v2Containers/TestPage/index.js +31 -0
  330. package/v2Containers/TestPage/messages.js +13 -0
  331. package/v2Containers/TestPage/reducer.js +21 -0
  332. package/v2Containers/TestPage/sagas.js +11 -0
  333. package/v2Containers/Testv2/actions.js +15 -0
  334. package/v2Containers/Testv2/constants.js +7 -0
  335. package/v2Containers/Testv2/index.js +47 -0
  336. package/v2Containers/Testv2/messages.js +13 -0
  337. package/v2Containers/Testv2/reducer.js +23 -0
  338. package/v2Containers/Testv2/sagas.js +11 -0
  339. package/v2Containers/Testv2/selectors.js +25 -0
  340. package/v2Containers/Testv2/tests/actions.test.js +18 -0
  341. package/v2Containers/Testv2/tests/index.test.js +10 -0
  342. package/v2Containers/Testv2/tests/reducer.test.js +9 -0
  343. package/v2Containers/Testv2/tests/sagas.test.js +15 -0
  344. package/v2Containers/Testv2/tests/selectors.test.js +10 -0
  345. package/v2Containers/WeChat/MapTemplates/_mapTemplates.scss +8 -0
  346. package/v2Containers/WeChat/MapTemplates/actions.js +52 -0
  347. package/v2Containers/WeChat/MapTemplates/constants.js +28 -0
  348. package/v2Containers/WeChat/MapTemplates/index.js +1385 -0
  349. package/v2Containers/WeChat/MapTemplates/messages.js +73 -0
  350. package/v2Containers/WeChat/MapTemplates/reducer.js +74 -0
  351. package/v2Containers/WeChat/MapTemplates/sagas.js +86 -0
  352. package/v2Containers/WeChat/MapTemplates/selectors.js +25 -0
  353. package/v2Containers/WeChat/MapTemplates/tests/actions.test.js +18 -0
  354. package/v2Containers/WeChat/MapTemplates/tests/index.test.js +10 -0
  355. package/v2Containers/WeChat/MapTemplates/tests/reducer.test.js +9 -0
  356. package/v2Containers/WeChat/MapTemplates/tests/sagas.test.js +15 -0
  357. package/v2Containers/WeChat/MapTemplates/tests/selectors.test.js +10 -0
  358. package/v2Containers/WeChat/RichmediaTemplates/Create/_createRichmedia.scss +57 -0
  359. package/v2Containers/WeChat/RichmediaTemplates/Create/actions.js +36 -0
  360. package/v2Containers/WeChat/RichmediaTemplates/Create/constants.js +15 -0
  361. package/v2Containers/WeChat/RichmediaTemplates/Create/index.js +1053 -0
  362. package/v2Containers/WeChat/RichmediaTemplates/Create/messages.js +141 -0
  363. package/v2Containers/WeChat/RichmediaTemplates/Create/reducer.js +60 -0
  364. package/v2Containers/WeChat/RichmediaTemplates/Create/richmediaschema.js +497 -0
  365. package/v2Containers/WeChat/RichmediaTemplates/Create/sagas.js +48 -0
  366. package/v2Containers/WeChat/RichmediaTemplates/Create/selectors.js +37 -0
  367. package/v2Containers/WeChat/RichmediaTemplates/Create/tests/actions.test.js +18 -0
  368. package/v2Containers/WeChat/RichmediaTemplates/Create/tests/index.test.js +10 -0
  369. package/v2Containers/WeChat/RichmediaTemplates/Create/tests/reducer.test.js +9 -0
  370. package/v2Containers/WeChat/RichmediaTemplates/Create/tests/sagas.test.js +15 -0
  371. package/v2Containers/WeChat/RichmediaTemplates/Create/tests/selectors.test.js +10 -0
  372. package/v2Containers/WeChat/RichmediaTemplates/Edit/actions.js +20 -0
  373. package/v2Containers/WeChat/RichmediaTemplates/Edit/constants.js +10 -0
  374. package/v2Containers/WeChat/RichmediaTemplates/Edit/index.js +116 -0
  375. package/v2Containers/WeChat/RichmediaTemplates/Edit/messages.js +13 -0
  376. package/v2Containers/WeChat/RichmediaTemplates/Edit/reducer.js +28 -0
  377. package/v2Containers/WeChat/RichmediaTemplates/Edit/sagas.js +32 -0
  378. package/v2Containers/WeChat/RichmediaTemplates/Edit/selectors.js +30 -0
  379. package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/actions.test.js +18 -0
  380. package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/index.test.js +10 -0
  381. package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/reducer.test.js +9 -0
  382. package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/sagas.test.js +15 -0
  383. package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/selectors.test.js +10 -0
  384. package/v2Containers/WeChat/RichmediaTemplates/View/actions.js +15 -0
  385. package/v2Containers/WeChat/RichmediaTemplates/View/constants.js +7 -0
  386. package/v2Containers/WeChat/RichmediaTemplates/View/index.js +47 -0
  387. package/v2Containers/WeChat/RichmediaTemplates/View/messages.js +13 -0
  388. package/v2Containers/WeChat/RichmediaTemplates/View/reducer.js +23 -0
  389. package/v2Containers/WeChat/RichmediaTemplates/View/sagas.js +11 -0
  390. package/v2Containers/WeChat/RichmediaTemplates/View/selectors.js +25 -0
  391. package/v2Containers/WeChat/RichmediaTemplates/View/tests/actions.test.js +18 -0
  392. package/v2Containers/WeChat/RichmediaTemplates/View/tests/index.test.js +10 -0
  393. package/v2Containers/WeChat/RichmediaTemplates/View/tests/reducer.test.js +9 -0
  394. package/v2Containers/WeChat/RichmediaTemplates/View/tests/sagas.test.js +15 -0
  395. package/v2Containers/WeChat/RichmediaTemplates/View/tests/selectors.test.js +10 -0
@@ -0,0 +1,258 @@
1
+ /*
2
+ *
3
+ * EmailWrapper
4
+ *
5
+ */
6
+ import PropTypes from 'prop-types';
7
+ import React from 'react';
8
+ import { connect } from 'react-redux';
9
+ import { FormattedMessage, injectIntl, intlShape } from 'react-intl';
10
+ import { createStructuredSelector } from 'reselect';
11
+ import { bindActionCreators } from 'redux';
12
+ import _ from 'lodash';
13
+ import styled from 'styled-components';
14
+ import { CapRadioCard, CapNotification, CapInput, CapUploader, CapSpin, CapButton} from '@capillarytech/cap-ui-library';
15
+ import ComponentWithLabelHOC from '@capillarytech/cap-ui-library/assets/HOCs/ComponentWithLabelHOC';
16
+ import { UserIsAuthenticated } from '../../utils/authWrapper';
17
+ import {selectEmailLayout, selectCmsTemplates, selectEdmEditor, uploadSelector} from '../Templates/selectors';
18
+ import * as templatesActionsCreators from '../Templates/actions';
19
+ import Email from '../Email';
20
+ import CmsTemplatesComponent from '../../components/CmsTemplatesComponent';
21
+ import messages from './messages';
22
+ const CapRadioCardWithLabel = ComponentWithLabelHOC(CapRadioCard);
23
+ const CardContainer = styled.div`
24
+ margin-top: 16px;
25
+ .ant-radio-group{
26
+ .ant-radio-button-wrapper{
27
+ &:first-child{
28
+ margin-left: unset;
29
+ }
30
+ }
31
+
32
+ }
33
+ `;
34
+ export class EmailWrapper extends React.Component { // eslint-disable-line react/prefer-stateless-function
35
+ constructor(props) {
36
+ super(props);
37
+ this.emailUploader = React.createRef();
38
+ this.state = {
39
+ templateName: '',
40
+ routeParams: {
41
+ pathname: `/email/create`,
42
+ query: { module: 'library', type: 'embedded'},
43
+ },
44
+ modeContent: {
45
+
46
+ },
47
+ // selectedCreateMode: '',
48
+
49
+ };
50
+ this.modes = [
51
+ {
52
+ title: <FormattedMessage {...messages.zipUpload}/>,
53
+ content: <FormattedMessage {...messages.zipUploadDesc}/>,
54
+ value: 'upload',
55
+ // onClick: () => {
56
+ // this.emailUploader.current.click();
57
+ // },
58
+ },
59
+ {
60
+ title: <FormattedMessage {...messages.useEditor}/>,
61
+ content: <FormattedMessage {...messages.useEditorDesc}/>,
62
+ value: 'editor',
63
+ },
64
+ ];
65
+ }
66
+
67
+ componentDidUpdate() {
68
+ const {modeContent} = this.state;
69
+ // const isValid = this.isValid();
70
+ const {emailCreateMode, EmailLayout, CmsTemplates, step, SelectedEdmDefaultTemplate, templatesActions} = this.props;
71
+ if (step === "modeSelection" && !this.state.selectedCreateMode && emailCreateMode === 'upload' && !EmailLayout) {
72
+ //document.getElementById('upload-email-template').click();
73
+ } else if (step === "templateSelection" && !this.state.selectedCreateMode) {
74
+ if (emailCreateMode === "editor" && !CmsTemplates) {
75
+ templatesActions.getEdmDefaultTemplates();
76
+ }
77
+ } else if (step === "createTemplateContent" && !this.state.selectedCreateMode) {
78
+ if (emailCreateMode === 'upload' && !_.isEmpty(EmailLayout)) {
79
+ this.setCreateMode('upload');
80
+ } else if (emailCreateMode === "editor" && _.isEmpty(SelectedEdmDefaultTemplate)) {
81
+ this.handleEdmDefaultTemplateSelection(modeContent.id);
82
+ }
83
+ }
84
+ }
85
+
86
+
87
+ componentWillUnmount() {
88
+ this.props.onResetStep();
89
+ this.props.templatesActions.resetTemplateData();
90
+ }
91
+ onTemplateNameChange = (ev) => {
92
+ this.setState({templateName: ev.target.value});
93
+ }
94
+ onChange = (e) => {
95
+ this.props.onEmailModeChange( e.target.value );
96
+ };
97
+ //isValid = () => !_.isEmpty(this.state.templateName)
98
+ setCreateMode = (emailCreateMode) => {
99
+ this.setState({selectedCreateMode: emailCreateMode});
100
+ }
101
+ handleZipUploadError = () => {
102
+ const message = {
103
+ key: "email-upload-error",
104
+ message: this.props.intl.formatMessage(messages.invalidUploadFileError2),
105
+ description: this.props.intl.formatMessage(messages.invalidUploadFileErrorDesc2),
106
+ };
107
+ CapNotification.error(message);
108
+ }
109
+ handleFileUpload = (file) => {
110
+ const { templatesActions, intl, showNextStep, isUploading } = this.props;
111
+ if (!isUploading) {
112
+ const fileExtension = file.name.split('.').pop();
113
+ const supportedZipFormats = ['zip'];
114
+
115
+
116
+ if (supportedZipFormats.indexOf(fileExtension.toLowerCase()) !== -1) {
117
+ templatesActions.handleZipUpload(file.originFileObj, () => { //handle upload success
118
+ this.setState({modeContent: { file}}, showNextStep);
119
+ }, this.handleZipUploadError);
120
+ } else if (fileExtension === 'html' || fileExtension === 'htm') {
121
+ const reader = new FileReader();
122
+ reader.onload = () => {
123
+ const text = reader.result;
124
+ this.setState({modeContent: { file}}, () => {
125
+ templatesActions.handleHtmlUpload(text);
126
+ });
127
+
128
+ // showNextStep();
129
+ };
130
+ reader.readAsText(file.originFileObj);
131
+ } else {
132
+ const message = {
133
+ key: "email-upload-error",
134
+ message: intl.formatMessage(messages.invalidUploadFileError),
135
+ description: intl.formatMessage(messages.invalidUploadFileErrorDesc),
136
+ };
137
+ CapNotification.error(message);
138
+ }
139
+ }
140
+ };
141
+
142
+ handleEdmDefaultTemplateSelection = (id) => {
143
+ const {CmsTemplates, templatesActions } = this.props;
144
+ const data = _.find(CmsTemplates, {_id: id});
145
+
146
+ templatesActions.setEdmTemplate(data);
147
+ this.setState({
148
+ selectedCreateMode: 'editor'});
149
+ };
150
+ useFileUpload = ({file}) => {
151
+ this.setState({modeContent: {}}, () => {
152
+ this.handleFileUpload(file);
153
+ });
154
+ }
155
+ useEditor = (id) => {
156
+ this.setState({modeContent: {id}}, this.props.showNextStep);
157
+ }
158
+
159
+ isShowEmailCreate = () => !_.isEmpty(this.state.selectedCreateMode) && (!_.isEmpty(this.props.EmailLayout) || this.props.SelectedEdmDefaultTemplate)
160
+ render() {
161
+ const {showTemplateName, emailCreateMode, isGetFormData, getFormdata, type, CmsTemplates, step, cap, isFullMode, EmailLayout, setIsLoadingContent} = this.props;
162
+ const {templateName, modeContent} = this.state;
163
+ const isShowEmailCreate = this.isShowEmailCreate();
164
+ return (
165
+ <div>
166
+ <CapSpin spinning={emailCreateMode === "upload" ? this.props.isUploading : false} >
167
+ {step === "modeSelection" || (step === "templateSelection" && emailCreateMode === "upload") ?
168
+ <div>
169
+ {isFullMode &&
170
+ <CapInput
171
+ label={<FormattedMessage {...messages.creativeName}/>}
172
+ onChange={this.onTemplateNameChange}
173
+ value={templateName}
174
+ labelPosition="top"
175
+ />
176
+ }
177
+ <CardContainer>
178
+ <CapRadioCardWithLabel
179
+ panes={this.modes}
180
+ onChange={this.onChange}
181
+ selected={emailCreateMode}
182
+ label={<FormattedMessage {...messages.createMode}/>}
183
+ />
184
+ </CardContainer>
185
+ <div>
186
+ {emailCreateMode === "upload" &&
187
+ <div style={{ marginLeft: '8px'}}>
188
+ <CapUploader onChange={this.useFileUpload} accept=".zip, .html, .htm" showUploadList={false}>
189
+ <CapButton>Upload</CapButton>
190
+ </CapUploader>
191
+ {!_.isEmpty(EmailLayout) &&
192
+ <div>{_.get(modeContent, "file.name")}</div>
193
+ }
194
+ </div>
195
+ }
196
+ </div>
197
+ </div>
198
+ :
199
+ <div>
200
+ {isShowEmailCreate && <Email
201
+ setIsLoadingContent={setIsLoadingContent}
202
+ key="email-create-template"
203
+ location={this.state.routeParams}
204
+ route={{ name: 'email' }}
205
+ params={{}}
206
+ isGetFormData={isGetFormData}
207
+ getFormdata={getFormdata}
208
+ getFormSubscriptionData={getFormdata}
209
+ getDefaultTags={type}
210
+ isFullMode={isFullMode}
211
+ defaultData={{'template-name': templateName}}
212
+ cap={cap}
213
+ showTemplateName={showTemplateName}
214
+ />}
215
+ {CmsTemplates && !isShowEmailCreate && <CmsTemplatesComponent cmsTemplates={CmsTemplates} handleEdmDefaultTemplateSelection={this.useEditor}/>}
216
+ </div>
217
+ }
218
+ </CapSpin>
219
+ </div>
220
+ );
221
+ }
222
+ }
223
+
224
+ EmailWrapper.propTypes = {
225
+ onEmailModeChange: PropTypes.func.isRequired,
226
+ isGetFormData: PropTypes.bool,
227
+ type: PropTypes.string,
228
+ emailCreateMode: PropTypes.string,
229
+ EmailLayout: PropTypes.object,
230
+ templatesActions: PropTypes.object,
231
+ CmsTemplates: PropTypes.arrayOf(PropTypes.object),
232
+ SelectedEdmDefaultTemplate: PropTypes.object,
233
+ step: PropTypes.string,
234
+ showNextStep: PropTypes.func,
235
+ getFormdata: PropTypes.func,
236
+ intl: intlShape,
237
+ cap: PropTypes.object,
238
+ onResetStep: PropTypes.func,
239
+ isFullMode: PropTypes.bool,
240
+ isUploading: PropTypes.bool,
241
+ setIsLoadingContent: PropTypes.func,
242
+ showTemplateName: PropTypes.func,
243
+ };
244
+
245
+ const mapStateToProps = createStructuredSelector({
246
+ EmailLayout: selectEmailLayout(),
247
+ CmsTemplates: selectCmsTemplates(),
248
+ SelectedEdmDefaultTemplate: selectEdmEditor(),
249
+ isUploading: uploadSelector(),
250
+ });
251
+
252
+ function mapDispatchToProps(dispatch) {
253
+ return {
254
+ templatesActions: bindActionCreators(templatesActionsCreators, dispatch),
255
+ };
256
+ }
257
+
258
+ export default UserIsAuthenticated(connect(mapStateToProps, mapDispatchToProps)(injectIntl(EmailWrapper)));
@@ -0,0 +1,57 @@
1
+ /*
2
+ * EmailWrapper Messages
3
+ *
4
+ * This contains all the text for the EmailWrapper component.
5
+ */
6
+ import { defineMessages } from 'react-intl';
7
+
8
+ export default defineMessages({
9
+ header: {
10
+ id: 'app.containers.EmailWrapper.header',
11
+ defaultMessage: 'This is EmailWrapper container !',
12
+ },
13
+ useEditor: {
14
+ id: 'app.containers.EmailWrapper.useEditor',
15
+ defaultMessage: 'Create using editor',
16
+ },
17
+ useEditorDesc: {
18
+ id: 'app.containers.EmailWrapper.useEditorDesc',
19
+ defaultMessage: 'Create using in-built template',
20
+ },
21
+ zipUpload: {
22
+ id: 'app.containers.EmailWrapper.zipUpload',
23
+ defaultMessage: 'Upload zip file',
24
+ },
25
+ zipUploadDesc: {
26
+ id: 'app.containers.EmailWrapper.zipUploadDesc',
27
+ defaultMessage: 'Upload compressed file (Zip) containing HTML & images',
28
+ },
29
+ creativeName: {
30
+ id: 'app.containers.EmailWrapper.creativeName',
31
+ defaultMessage: 'Creative name',
32
+ },
33
+ createMode: {
34
+ id: 'app.containers.EmailWrapper.createMode',
35
+ defaultMessage: 'How do you want to create ?',
36
+ },
37
+ invalidUploadFileError: {
38
+ id: `app.containers.EmailWrapper.invalidUploadFileError`,
39
+ defaultMessage: `File cannot be uploaded.`,
40
+ },
41
+ invalidUploadFileErrorDesc: {
42
+ id: `app.containers.EmailWrapper.invalidUploadFileDesc`,
43
+ defaultMessage: `Please select another file with valid file format.`,
44
+ },
45
+ invalidUploadFileError2: {
46
+ id: `app.containers.EmailWrapper.invalidUploadFileError`,
47
+ defaultMessage: `File upload failed`,
48
+ },
49
+ invalidUploadFileErrorDesc2: {
50
+ id: `app.containers.EmailWrapper.invalidUploadFileDesc`,
51
+ defaultMessage: `Please select another file with valid file contents`,
52
+ },
53
+ upload: {
54
+ id: `app.containers.EmailWrapper.upload`,
55
+ defaultMessage: `Upload`,
56
+ },
57
+ });
@@ -0,0 +1,23 @@
1
+ /*
2
+ *
3
+ * EmailWrapper reducer
4
+ *
5
+ */
6
+
7
+ import { fromJS } from 'immutable';
8
+ import {
9
+ DEFAULT_ACTION,
10
+ } from './constants';
11
+
12
+ const initialState = fromJS({});
13
+
14
+ function emailWrapperReducer(state = initialState, action) {
15
+ switch (action.type) {
16
+ case DEFAULT_ACTION:
17
+ return state;
18
+ default:
19
+ return state;
20
+ }
21
+ }
22
+
23
+ export default emailWrapperReducer;
@@ -0,0 +1,11 @@
1
+ // import { take, call, put, select } from 'redux-saga/effects';
2
+
3
+ // Individual exports for testing
4
+ export function* defaultSaga() {
5
+ // See example in containers/HomePage/sagas.js
6
+ }
7
+
8
+ // All sagas to be loaded
9
+ export default [
10
+ defaultSaga,
11
+ ];
@@ -0,0 +1,25 @@
1
+ import { createSelector } from 'reselect';
2
+
3
+ /**
4
+ * Direct selector to the emailWrapper state domain
5
+ */
6
+ const selectEmailWrapperDomain = () => (state) => state.get('emailWrapper');
7
+
8
+ /**
9
+ * Other specific selectors
10
+ */
11
+
12
+
13
+ /**
14
+ * Default selector used by EmailWrapper
15
+ */
16
+
17
+ const makeSelectEmailWrapper = () => createSelector(
18
+ selectEmailWrapperDomain(),
19
+ (substate) => substate.toJS()
20
+ );
21
+
22
+ export default makeSelectEmailWrapper;
23
+ export {
24
+ selectEmailWrapperDomain,
25
+ };
@@ -0,0 +1,18 @@
1
+
2
+ import {
3
+ defaultAction,
4
+ } from '../actions';
5
+ import {
6
+ DEFAULT_ACTION,
7
+ } from '../constants';
8
+
9
+ describe('EmailWrapper actions', () => {
10
+ describe('Default Action', () => {
11
+ it('has a type of DEFAULT_ACTION', () => {
12
+ const expected = {
13
+ type: DEFAULT_ACTION,
14
+ };
15
+ expect(defaultAction()).toEqual(expected);
16
+ });
17
+ });
18
+ });
@@ -0,0 +1,10 @@
1
+ // import React from 'react';
2
+ // import { shallow } from 'enzyme';
3
+
4
+ // import { EmailWrapper } from '../index';
5
+
6
+ describe('<EmailWrapper />', () => {
7
+ it('Expect to have unit tests specified', () => {
8
+ expect(true).toEqual(false);
9
+ });
10
+ });
@@ -0,0 +1,9 @@
1
+
2
+ import { fromJS } from 'immutable';
3
+ import emailWrapperReducer from '../reducer';
4
+
5
+ describe('emailWrapperReducer', () => {
6
+ it('returns the initial state', () => {
7
+ expect(emailWrapperReducer(undefined, {})).toEqual(fromJS({}));
8
+ });
9
+ });
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Test sagas
3
+ */
4
+
5
+ /* eslint-disable redux-saga/yield-effects */
6
+ // import { take, call, put, select } from 'redux-saga/effects';
7
+ // import { defaultSaga } from '../sagas';
8
+
9
+ // const generator = defaultSaga();
10
+
11
+ describe('defaultSaga Saga', () => {
12
+ it('Expect to have unit tests specified', () => {
13
+ expect(true).toEqual(false);
14
+ });
15
+ });
@@ -0,0 +1,10 @@
1
+ // import { fromJS } from 'immutable';
2
+ // import { makeSelectEmailWrapperDomain } from '../selectors';
3
+
4
+ // const selector = makeSelectEmailWrapperDomain();
5
+
6
+ describe('makeSelectEmailWrapperDomain', () => {
7
+ it('Expect to have unit tests specified', () => {
8
+ expect(true).toEqual(false);
9
+ });
10
+ });
@@ -0,0 +1,17 @@
1
+ /*
2
+ *
3
+ * LanguageProvider actions
4
+ *
5
+ */
6
+
7
+ import {
8
+ CHANGE_LOCALE,
9
+ } from './constants';
10
+
11
+ export function changeLocale(languageLocale) {
12
+ console.log('trying to change locale', languageLocale);
13
+ return {
14
+ type: CHANGE_LOCALE,
15
+ locale: languageLocale,
16
+ };
17
+ }
@@ -0,0 +1,8 @@
1
+ /*
2
+ *
3
+ * LanguageProvider constants
4
+ *
5
+ */
6
+
7
+ export const CHANGE_LOCALE = 'app/LanguageToggle/CHANGE_LOCALE';
8
+ export const DEFAULT_LOCALE = 'en';
@@ -0,0 +1,46 @@
1
+ /*
2
+ *
3
+ * LanguageProvider
4
+ *
5
+ * this component connects the redux state language locale to the
6
+ * IntlProvider component and i18n messages (loaded from `app/translations`)
7
+ */
8
+
9
+ import PropTypes from 'prop-types';
10
+
11
+ import React from 'react';
12
+ import { connect } from 'react-redux';
13
+ import { createSelector } from 'reselect';
14
+ import { IntlProvider } from 'react-intl';
15
+
16
+ import { makeSelectLocale } from './selectors';
17
+
18
+ export class LanguageProvider extends React.PureComponent { // eslint-disable-line react/prefer-stateless-function
19
+ render() {
20
+ return (
21
+ <IntlProvider locale={this.props.locale} key={this.props.locale} messages={this.props.messages[this.props.locale]}>
22
+ {React.Children.only(this.props.children)}
23
+ </IntlProvider>
24
+ );
25
+ }
26
+ }
27
+
28
+ LanguageProvider.propTypes = {
29
+ locale: PropTypes.string,
30
+ messages: PropTypes.object,
31
+ children: PropTypes.element.isRequired,
32
+ };
33
+
34
+
35
+ const mapStateToProps = createSelector(
36
+ makeSelectLocale(),
37
+ (locale) => ({ locale })
38
+ );
39
+
40
+ function mapDispatchToProps(dispatch) {
41
+ return {
42
+ dispatch,
43
+ };
44
+ }
45
+
46
+ export default connect(mapStateToProps, mapDispatchToProps)(LanguageProvider);
@@ -0,0 +1,30 @@
1
+ /*
2
+ *
3
+ * LanguageProvider reducer
4
+ *
5
+ */
6
+
7
+ import { fromJS } from 'immutable';
8
+
9
+ import {
10
+ CHANGE_LOCALE,
11
+ } from './constants';
12
+ import {
13
+ DEFAULT_LOCALE,
14
+ } from '../Cap/constants'; // eslint-disable-line
15
+
16
+ const initialState = fromJS({
17
+ locale: DEFAULT_LOCALE,
18
+ });
19
+
20
+ function languageProviderReducer(state = initialState, action) {
21
+ switch (action.type) {
22
+ case CHANGE_LOCALE:
23
+ return state
24
+ .set('locale', action.locale);
25
+ default:
26
+ return state;
27
+ }
28
+ }
29
+
30
+ export default languageProviderReducer;
@@ -0,0 +1,20 @@
1
+ import { createSelector } from 'reselect';
2
+
3
+ /**
4
+ * Direct selector to the languageToggle state domain
5
+ */
6
+ const selectLanguage = (state) => state.get('language');
7
+
8
+ /**
9
+ * Select the language locale
10
+ */
11
+
12
+ const makeSelectLocale = () => createSelector(
13
+ selectLanguage,
14
+ (languageState) => languageState.get('locale')
15
+ );
16
+
17
+ export {
18
+ selectLanguage,
19
+ makeSelectLocale,
20
+ };
@@ -0,0 +1,19 @@
1
+ import {
2
+ changeLocale,
3
+ } from '../actions';
4
+
5
+ import {
6
+ CHANGE_LOCALE,
7
+ } from '../constants';
8
+
9
+ describe('LanguageProvider actions', () => {
10
+ describe('Change Local Action', () => {
11
+ it('has a type of CHANGE_LOCALE', () => {
12
+ const expected = {
13
+ type: CHANGE_LOCALE,
14
+ locale: 'de',
15
+ };
16
+ expect(changeLocale('de')).toEqual(expected);
17
+ });
18
+ });
19
+ });
@@ -0,0 +1,49 @@
1
+ import React from 'react';
2
+ import { shallow, mount } from 'enzyme';
3
+ import { FormattedMessage, defineMessages } from 'react-intl';
4
+ import { Provider } from 'react-redux';
5
+ import { browserHistory } from 'react-router';
6
+
7
+ import ConnectedLanguageProvider, { LanguageProvider } from '../index';
8
+ import configureStore from '../../../store';
9
+
10
+ import { translationMessages } from '../../../i18n';
11
+
12
+ const messages = defineMessages({
13
+ someMessage: {
14
+ id: 'some.id',
15
+ defaultMessage: 'This is some default message',
16
+ en: 'This is some en message',
17
+ },
18
+ });
19
+
20
+ describe('<LanguageProvider />', () => {
21
+ it('should render its children', () => {
22
+ const children = (<h1>Test</h1>);
23
+ const renderedComponent = shallow(
24
+ <LanguageProvider messages={messages} locale="en">
25
+ {children}
26
+ </LanguageProvider>
27
+ );
28
+ expect(renderedComponent.contains(children)).toBe(true);
29
+ });
30
+ });
31
+
32
+ describe('<ConnectedLanguageProvider />', () => {
33
+ let store;
34
+
35
+ beforeAll(() => {
36
+ store = configureStore({}, browserHistory);
37
+ });
38
+
39
+ it('should render the default language messages', () => {
40
+ const renderedComponent = mount(
41
+ <Provider store={store}>
42
+ <ConnectedLanguageProvider messages={translationMessages}>
43
+ <FormattedMessage {...messages.someMessage} />
44
+ </ConnectedLanguageProvider>
45
+ </Provider>
46
+ );
47
+ expect(renderedComponent.contains(<FormattedMessage {...messages.someMessage} />)).toBe(true);
48
+ });
49
+ });
@@ -0,0 +1,20 @@
1
+ import { fromJS } from 'immutable';
2
+
3
+ import languageProviderReducer from '../reducer';
4
+ import {
5
+ CHANGE_LOCALE,
6
+ } from '../constants';
7
+
8
+ describe('languageProviderReducer', () => {
9
+ it('returns the initial state', () => {
10
+ expect(languageProviderReducer(undefined, {})).toEqual(fromJS({
11
+ locale: 'en',
12
+ }));
13
+ });
14
+
15
+ it('changes the locale', () => {
16
+ expect(languageProviderReducer(undefined, { type: CHANGE_LOCALE, locale: 'de' }).toJS()).toEqual({
17
+ locale: 'de',
18
+ });
19
+ });
20
+ });
@@ -0,0 +1,15 @@
1
+ import { fromJS } from 'immutable';
2
+
3
+ import {
4
+ selectLanguage,
5
+ } from '../selectors';
6
+
7
+ describe('selectLanguage', () => {
8
+ it('should select the global state', () => {
9
+ const globalState = fromJS({});
10
+ const mockedState = fromJS({
11
+ language: globalState,
12
+ });
13
+ expect(selectLanguage(mockedState)).toEqual(globalState);
14
+ });
15
+ });