@capillarytech/creatives-library 2.0.69 → 2.0.71

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 (391) hide show
  1. package/app.js +1 -1
  2. package/components/Ckeditor/index.js +2 -1
  3. package/components/FormBuilder/index.js +25 -10
  4. package/components/Header/index.js +3 -1
  5. package/components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +38 -3
  6. package/components/TemplatePreview/index.js +45 -51
  7. package/components/TemplatePreview/messages.js +1 -1
  8. package/containers/Cap/actions.js +0 -5
  9. package/containers/Cap/reducer.js +1 -1
  10. package/containers/Cap/selectors.js +0 -13
  11. package/containers/Ebill/index.js +1 -2
  12. package/containers/Email/_email.scss +1 -0
  13. package/containers/Email/actions.js +3 -8
  14. package/containers/Email/constants.js +0 -1
  15. package/containers/Email/index.js +947 -322
  16. package/containers/Email/reducer.js +0 -3
  17. package/containers/Email/sagas.js +6 -3
  18. package/containers/Email/selectors.js +1 -4
  19. package/containers/Line/Create/index.js +1 -2
  20. package/containers/Line/Edit/_lineEdit.scss +4 -0
  21. package/containers/Line/Edit/index.js +1 -3
  22. package/containers/MobilePush/Create/_mobilePushCreate.scss +3 -12
  23. package/containers/MobilePush/Create/actions.js +0 -6
  24. package/containers/MobilePush/Create/constants.js +0 -1
  25. package/containers/MobilePush/Create/index.js +1133 -628
  26. package/containers/MobilePush/Create/messages.js +1 -5
  27. package/containers/MobilePush/Create/reducer.js +0 -2
  28. package/containers/MobilePush/Create/selectors.js +3 -3
  29. package/containers/MobilePush/Edit/_mobilePushCreate.scss +3 -9
  30. package/containers/MobilePush/Edit/index.js +1127 -393
  31. package/containers/MobilePush/Edit/messages.js +0 -4
  32. package/containers/MobilePush/Edit/reducer.js +1 -2
  33. package/containers/MobilePush/Edit/selectors.js +3 -6
  34. package/containers/Sms/Create/_smsCreate.scss +2 -1
  35. package/containers/Sms/Create/actions.js +4 -4
  36. package/containers/Sms/Create/index.js +570 -102
  37. package/containers/Sms/Create/sagas.js +2 -1
  38. package/containers/Sms/Edit/actions.js +5 -10
  39. package/containers/Sms/Edit/constants.js +0 -1
  40. package/containers/Sms/Edit/index.js +548 -103
  41. package/containers/Sms/Edit/reducer.js +0 -2
  42. package/containers/Sms/Edit/sagas.js +3 -1
  43. package/containers/TagList/index.js +3 -3
  44. package/containers/Templates/actions.js +1 -3
  45. package/containers/Templates/index.js +299 -268
  46. package/containers/Templates/messages.js +90 -122
  47. package/containers/Templates/reducer.js +3 -3
  48. package/containers/Templates/sagas.js +1 -5
  49. package/containers/Templates/selectors.js +1 -41
  50. package/containers/WeChat/MapTemplates/index.js +3 -4
  51. package/containers/WeChat/RichmediaTemplates/Create/index.js +18 -4
  52. package/containers/WeChat/RichmediaTemplates/Create/messages.js +4 -0
  53. package/containers/WeChat/RichmediaTemplates/Edit/index.js +3 -1
  54. package/containers/WeChat/RichmediaTemplates/View/index.js +3 -1
  55. package/index.js +31 -31
  56. package/initialState.js +6 -0
  57. package/package.json +3 -3
  58. package/routes.js +24 -19
  59. package/services/api.js +6 -2
  60. package/services/getSchema.js +18 -0
  61. package/v2Containers/App/actions.js +7 -0
  62. package/v2Containers/App/constants.js +3 -0
  63. package/v2Containers/App/reducer.js +19 -0
  64. package/v2Containers/App/sagas.js +26 -0
  65. package/v2Containers/App/selectors.js +25 -0
  66. package/v2Containers/App/tests/actions.test.js +18 -0
  67. package/v2Containers/App/tests/reducer.test.js +9 -0
  68. package/v2Containers/App/tests/sagas.test.js +15 -0
  69. package/v2Containers/App/tests/selectors.test.js +10 -0
  70. package/v2Containers/Assets/Gallery/_gallery.scss +0 -0
  71. package/v2Containers/Assets/Gallery/actions.js +37 -0
  72. package/v2Containers/Assets/Gallery/constants.js +23 -0
  73. package/v2Containers/Assets/Gallery/index.js +479 -0
  74. package/v2Containers/Assets/Gallery/messages.js +97 -0
  75. package/v2Containers/Assets/Gallery/reducer.js +81 -0
  76. package/v2Containers/Assets/Gallery/sagas.js +84 -0
  77. package/v2Containers/Assets/Gallery/selectors.js +25 -0
  78. package/v2Containers/Assets/Gallery/tests/__snapshots__/reducer.test.js.snap +7 -0
  79. package/v2Containers/Assets/Gallery/tests/actions.test.js +26 -0
  80. package/v2Containers/Assets/Gallery/tests/index.test.js +10 -0
  81. package/v2Containers/Assets/Gallery/tests/reducer.test.js +95 -0
  82. package/v2Containers/Assets/Gallery/tests/sagas.test.js +15 -0
  83. package/v2Containers/Assets/Gallery/tests/selectors.test.js +10 -0
  84. package/v2Containers/CallTask/_callTask.scss +5 -0
  85. package/v2Containers/CallTask/actions.js +15 -0
  86. package/v2Containers/CallTask/constants.js +7 -0
  87. package/v2Containers/CallTask/index.js +141 -0
  88. package/v2Containers/CallTask/messages.js +21 -0
  89. package/v2Containers/CallTask/reducer.js +23 -0
  90. package/v2Containers/CallTask/sagas.js +11 -0
  91. package/v2Containers/CallTask/selectors.js +25 -0
  92. package/v2Containers/CallTask/tests/actions.test.js +18 -0
  93. package/v2Containers/CallTask/tests/index.test.js +10 -0
  94. package/v2Containers/CallTask/tests/reducer.test.js +9 -0
  95. package/v2Containers/CallTask/tests/sagas.test.js +15 -0
  96. package/v2Containers/CallTask/tests/selectors.test.js +10 -0
  97. package/v2Containers/Cap/actions.js +64 -0
  98. package/v2Containers/Cap/constants.js +24 -0
  99. package/v2Containers/Cap/index.js +349 -0
  100. package/v2Containers/Cap/messsages.js +63 -0
  101. package/v2Containers/Cap/reducer.js +111 -0
  102. package/v2Containers/Cap/sagas.js +143 -0
  103. package/v2Containers/Cap/selectors.js +85 -0
  104. package/v2Containers/Cap/tests/index.test.js +16 -0
  105. package/v2Containers/Cap/tests/selectors.test.js +28 -0
  106. package/v2Containers/ChannelTemplates/actions.js +20 -0
  107. package/v2Containers/ChannelTemplates/constants.js +8 -0
  108. package/v2Containers/ChannelTemplates/index.js +48 -0
  109. package/v2Containers/ChannelTemplates/messages.js +13 -0
  110. package/v2Containers/ChannelTemplates/reducer.js +34 -0
  111. package/v2Containers/ChannelTemplates/sagas.js +32 -0
  112. package/v2Containers/ChannelTemplates/selectors.js +25 -0
  113. package/v2Containers/ChannelTemplates/tests/actions.test.js +18 -0
  114. package/v2Containers/ChannelTemplates/tests/index.test.js +10 -0
  115. package/v2Containers/ChannelTemplates/tests/reducer.test.js +9 -0
  116. package/v2Containers/ChannelTemplates/tests/sagas.test.js +15 -0
  117. package/v2Containers/ChannelTemplates/tests/selectors.test.js +10 -0
  118. package/v2Containers/CreativesContainer/SlideBoxContent.js +257 -0
  119. package/v2Containers/CreativesContainer/SlideBoxFooter.js +45 -0
  120. package/v2Containers/CreativesContainer/SlideBoxHeader.js +70 -0
  121. package/v2Containers/CreativesContainer/actions.js +27 -0
  122. package/v2Containers/CreativesContainer/constants.js +16 -0
  123. package/v2Containers/CreativesContainer/index.js +483 -0
  124. package/v2Containers/CreativesContainer/index.scss +27 -0
  125. package/v2Containers/CreativesContainer/messages.js +293 -0
  126. package/v2Containers/CreativesContainer/reducer.js +29 -0
  127. package/v2Containers/CreativesContainer/sagas.js +11 -0
  128. package/v2Containers/CreativesContainer/selectors.js +30 -0
  129. package/v2Containers/CreativesContainer/tests/actions.test.js +18 -0
  130. package/v2Containers/CreativesContainer/tests/index.test.js +10 -0
  131. package/v2Containers/CreativesContainer/tests/reducer.test.js +9 -0
  132. package/v2Containers/CreativesContainer/tests/sagas.test.js +15 -0
  133. package/v2Containers/CreativesContainer/tests/selectors.test.js +10 -0
  134. package/v2Containers/Dashboard/actions.js +15 -0
  135. package/v2Containers/Dashboard/constants.js +7 -0
  136. package/v2Containers/Dashboard/index.js +54 -0
  137. package/v2Containers/Dashboard/messages.js +13 -0
  138. package/v2Containers/Dashboard/reducer.js +21 -0
  139. package/v2Containers/Dashboard/sagas.js +11 -0
  140. package/v2Containers/Dashboard/selectors.js +25 -0
  141. package/v2Containers/Dashboard/tests/actions.test.js +18 -0
  142. package/v2Containers/Dashboard/tests/index.test.js +10 -0
  143. package/v2Containers/Dashboard/tests/reducer.test.js +9 -0
  144. package/v2Containers/Dashboard/tests/sagas.test.js +15 -0
  145. package/v2Containers/Dashboard/tests/selectors.test.js +10 -0
  146. package/v2Containers/Ebill/_ebill.scss +5 -0
  147. package/v2Containers/Ebill/actions.js +43 -0
  148. package/v2Containers/Ebill/constants.js +20 -0
  149. package/v2Containers/Ebill/index.js +1261 -0
  150. package/v2Containers/Ebill/messages.js +73 -0
  151. package/v2Containers/Ebill/reducer.js +72 -0
  152. package/v2Containers/Ebill/sagas.js +65 -0
  153. package/v2Containers/Ebill/selectors.js +25 -0
  154. package/v2Containers/Ebill/tests/actions.test.js +18 -0
  155. package/v2Containers/Ebill/tests/index.test.js +10 -0
  156. package/v2Containers/Ebill/tests/reducer.test.js +9 -0
  157. package/v2Containers/Ebill/tests/sagas.test.js +15 -0
  158. package/v2Containers/Ebill/tests/selectors.test.js +10 -0
  159. package/v2Containers/Email/_email.scss +140 -0
  160. package/v2Containers/Email/actions.js +86 -0
  161. package/v2Containers/Email/constants.js +37 -0
  162. package/v2Containers/Email/index.js +2703 -0
  163. package/v2Containers/Email/initialSchema.js +540 -0
  164. package/v2Containers/Email/messages.js +237 -0
  165. package/v2Containers/Email/reducer.js +147 -0
  166. package/v2Containers/Email/sagas.js +133 -0
  167. package/v2Containers/Email/selectors.js +34 -0
  168. package/v2Containers/Email/tests/actions.test.js +18 -0
  169. package/v2Containers/Email/tests/index.test.js +10 -0
  170. package/v2Containers/Email/tests/reducer.test.js +9 -0
  171. package/v2Containers/Email/tests/sagas.test.js +15 -0
  172. package/v2Containers/Email/tests/selectors.test.js +10 -0
  173. package/v2Containers/EmailWrapper/actions.js +15 -0
  174. package/v2Containers/EmailWrapper/constants.js +7 -0
  175. package/v2Containers/EmailWrapper/index.js +258 -0
  176. package/v2Containers/EmailWrapper/messages.js +57 -0
  177. package/v2Containers/EmailWrapper/reducer.js +23 -0
  178. package/v2Containers/EmailWrapper/sagas.js +11 -0
  179. package/v2Containers/EmailWrapper/selectors.js +25 -0
  180. package/v2Containers/EmailWrapper/tests/actions.test.js +18 -0
  181. package/v2Containers/EmailWrapper/tests/index.test.js +10 -0
  182. package/v2Containers/EmailWrapper/tests/reducer.test.js +9 -0
  183. package/v2Containers/EmailWrapper/tests/sagas.test.js +15 -0
  184. package/v2Containers/EmailWrapper/tests/selectors.test.js +10 -0
  185. package/v2Containers/LanguageProvider/actions.js +17 -0
  186. package/v2Containers/LanguageProvider/constants.js +8 -0
  187. package/v2Containers/LanguageProvider/index.js +46 -0
  188. package/v2Containers/LanguageProvider/reducer.js +30 -0
  189. package/v2Containers/LanguageProvider/selectors.js +20 -0
  190. package/v2Containers/LanguageProvider/tests/actions.test.js +19 -0
  191. package/v2Containers/LanguageProvider/tests/index.test.js +49 -0
  192. package/v2Containers/LanguageProvider/tests/reducer.test.js +20 -0
  193. package/v2Containers/LanguageProvider/tests/selectors.test.js +15 -0
  194. package/v2Containers/Line/Create/_lineCreate.scss +43 -0
  195. package/v2Containers/Line/Create/actions.js +90 -0
  196. package/v2Containers/Line/Create/constants.js +39 -0
  197. package/v2Containers/Line/Create/index.js +822 -0
  198. package/v2Containers/Line/Create/messages.js +173 -0
  199. package/v2Containers/Line/Create/reducer.js +99 -0
  200. package/v2Containers/Line/Create/sagas.js +107 -0
  201. package/v2Containers/Line/Create/selectors.js +36 -0
  202. package/v2Containers/Line/Edit/_lineEdit.scss +21 -0
  203. package/v2Containers/Line/Edit/actions.js +79 -0
  204. package/v2Containers/Line/Edit/constants.js +27 -0
  205. package/v2Containers/Line/Edit/index.js +1050 -0
  206. package/v2Containers/Line/Edit/messages.js +157 -0
  207. package/v2Containers/Line/Edit/reducer.js +83 -0
  208. package/v2Containers/Line/Edit/sagas.js +81 -0
  209. package/v2Containers/Line/Edit/selectors.js +29 -0
  210. package/v2Containers/Line/Edit/tests/actions.test.js +18 -0
  211. package/v2Containers/Line/Edit/tests/index.test.js +10 -0
  212. package/v2Containers/Line/Edit/tests/reducer.test.js +9 -0
  213. package/v2Containers/Line/Edit/tests/sagas.test.js +15 -0
  214. package/v2Containers/Line/Edit/tests/selectors.test.js +10 -0
  215. package/v2Containers/Login/assets/images/capillary_logo.png +0 -0
  216. package/v2Containers/Login/components/LoginForm/index.js +59 -0
  217. package/v2Containers/Login/components/LoginForm/messages.js +21 -0
  218. package/v2Containers/Login/components/LoginForm/tests/index.test.js +10 -0
  219. package/v2Containers/Login/index.js +106 -0
  220. package/v2Containers/Login/messages.js +21 -0
  221. package/v2Containers/Login/selectors.js +25 -0
  222. package/v2Containers/Login/tests/index.test.js +10 -0
  223. package/v2Containers/Login/tests/sagas.test.js +15 -0
  224. package/v2Containers/Login/tests/selectors.test.js +10 -0
  225. package/v2Containers/MobilePush/Create/_mobilePushCreate.scss +41 -0
  226. package/v2Containers/MobilePush/Create/actions.js +52 -0
  227. package/v2Containers/MobilePush/Create/constants.js +24 -0
  228. package/v2Containers/MobilePush/Create/index.js +1759 -0
  229. package/v2Containers/MobilePush/Create/messages.js +237 -0
  230. package/v2Containers/MobilePush/Create/reducer.js +72 -0
  231. package/v2Containers/MobilePush/Create/sagas.js +60 -0
  232. package/v2Containers/MobilePush/Create/selectors.js +28 -0
  233. package/v2Containers/MobilePush/Create/tests/actions.test.js +18 -0
  234. package/v2Containers/MobilePush/Create/tests/index.test.js +10 -0
  235. package/v2Containers/MobilePush/Create/tests/reducer.test.js +9 -0
  236. package/v2Containers/MobilePush/Create/tests/sagas.test.js +15 -0
  237. package/v2Containers/MobilePush/Create/tests/selectors.test.js +10 -0
  238. package/v2Containers/MobilePush/Edit/_mobilePushCreate.scss +38 -0
  239. package/v2Containers/MobilePush/Edit/actions.js +91 -0
  240. package/v2Containers/MobilePush/Edit/constants.js +35 -0
  241. package/v2Containers/MobilePush/Edit/index.js +1846 -0
  242. package/v2Containers/MobilePush/Edit/messages.js +253 -0
  243. package/v2Containers/MobilePush/Edit/reducer.js +113 -0
  244. package/v2Containers/MobilePush/Edit/sagas.js +119 -0
  245. package/v2Containers/MobilePush/Edit/selectors.js +32 -0
  246. package/v2Containers/MobilePush/Edit/tests/actions.test.js +18 -0
  247. package/v2Containers/MobilePush/Edit/tests/index.test.js +10 -0
  248. package/v2Containers/MobilePush/Edit/tests/reducer.test.js +9 -0
  249. package/v2Containers/MobilePush/Edit/tests/sagas.test.js +15 -0
  250. package/v2Containers/MobilePush/Edit/tests/selectors.test.js +10 -0
  251. package/v2Containers/MobilePush/commonMethods.js +249 -0
  252. package/v2Containers/MobilePush/eventsMap.js +127 -0
  253. package/v2Containers/MobilePush/initialSchema.js +1739 -0
  254. package/v2Containers/MobilepushWrapper/_mobilepushWrapper.scss +18 -0
  255. package/v2Containers/MobilepushWrapper/index.js +136 -0
  256. package/v2Containers/MobilepushWrapper/messages.js +29 -0
  257. package/v2Containers/MobilepushWrapper/tests/index.test.js +10 -0
  258. package/v2Containers/NotFoundPage/index.js +25 -0
  259. package/v2Containers/NotFoundPage/messages.js +13 -0
  260. package/v2Containers/NotFoundPage/tests/index.test.js +17 -0
  261. package/v2Containers/Sms/Create/_smsCreate.scss +58 -0
  262. package/v2Containers/Sms/Create/actions.js +27 -0
  263. package/v2Containers/Sms/Create/constants.js +16 -0
  264. package/v2Containers/Sms/Create/index.js +1017 -0
  265. package/v2Containers/Sms/Create/messages.js +85 -0
  266. package/v2Containers/Sms/Create/reducer.js +41 -0
  267. package/v2Containers/Sms/Create/sagas.js +35 -0
  268. package/v2Containers/Sms/Create/selectors.js +28 -0
  269. package/v2Containers/Sms/Create/tests/actions.test.js +18 -0
  270. package/v2Containers/Sms/Create/tests/index.test.js +10 -0
  271. package/v2Containers/Sms/Create/tests/reducer.test.js +9 -0
  272. package/v2Containers/Sms/Create/tests/sagas.test.js +15 -0
  273. package/v2Containers/Sms/Create/tests/selectors.test.js +10 -0
  274. package/v2Containers/Sms/Edit/actions.js +45 -0
  275. package/v2Containers/Sms/Edit/constants.js +18 -0
  276. package/v2Containers/Sms/Edit/index.js +1018 -0
  277. package/v2Containers/Sms/Edit/messages.js +89 -0
  278. package/v2Containers/Sms/Edit/reducer.js +52 -0
  279. package/v2Containers/Sms/Edit/sagas.js +50 -0
  280. package/v2Containers/Sms/Edit/selectors.js +32 -0
  281. package/v2Containers/Sms/Edit/tests/actions.test.js +18 -0
  282. package/v2Containers/Sms/Edit/tests/index.test.js +10 -0
  283. package/v2Containers/Sms/Edit/tests/reducer.test.js +9 -0
  284. package/v2Containers/Sms/Edit/tests/sagas.test.js +15 -0
  285. package/v2Containers/Sms/Edit/tests/selectors.test.js +10 -0
  286. package/v2Containers/Sms/initialSchema.js +281 -0
  287. package/v2Containers/TagList/_tagList.scss +8 -0
  288. package/v2Containers/TagList/actions.js +15 -0
  289. package/v2Containers/TagList/constants.js +7 -0
  290. package/v2Containers/TagList/index.js +236 -0
  291. package/v2Containers/TagList/messages.js +13 -0
  292. package/v2Containers/TagList/reducer.js +23 -0
  293. package/v2Containers/TagList/sagas.js +11 -0
  294. package/v2Containers/TagList/selectors.js +25 -0
  295. package/v2Containers/TagList/tests/actions.test.js +18 -0
  296. package/v2Containers/TagList/tests/index.test.js +10 -0
  297. package/v2Containers/TagList/tests/reducer.test.js +9 -0
  298. package/v2Containers/TagList/tests/sagas.test.js +15 -0
  299. package/v2Containers/TagList/tests/selectors.test.js +10 -0
  300. package/v2Containers/Templates/_templates.scss +349 -0
  301. package/v2Containers/Templates/actions.js +110 -0
  302. package/v2Containers/Templates/constants.js +45 -0
  303. package/v2Containers/Templates/index.js +1682 -0
  304. package/v2Containers/Templates/messages.js +273 -0
  305. package/v2Containers/Templates/reducer.js +142 -0
  306. package/v2Containers/Templates/sagas.js +180 -0
  307. package/v2Containers/Templates/selectors.js +68 -0
  308. package/v2Containers/Templates/tests/actions.test.js +18 -0
  309. package/v2Containers/Templates/tests/index.test.js +10 -0
  310. package/v2Containers/Templates/tests/reducer.test.js +9 -0
  311. package/v2Containers/Templates/tests/sagas.test.js +15 -0
  312. package/v2Containers/Templates/tests/selectors.test.js +10 -0
  313. package/v2Containers/TemplatesV2/_templatesV2.scss +5 -0
  314. package/v2Containers/TemplatesV2/actions.js +16 -0
  315. package/v2Containers/TemplatesV2/constants.js +10 -0
  316. package/v2Containers/TemplatesV2/index.js +217 -0
  317. package/v2Containers/TemplatesV2/messages.js +29 -0
  318. package/v2Containers/TemplatesV2/selectors.js +25 -0
  319. package/v2Containers/TemplatesV2/tests/actions.test.js +18 -0
  320. package/v2Containers/TemplatesV2/tests/index.test.js +10 -0
  321. package/v2Containers/TemplatesV2/tests/reducer.test.js +9 -0
  322. package/v2Containers/TemplatesV2/tests/sagas.test.js +15 -0
  323. package/v2Containers/TemplatesV2/tests/selectors.test.js +10 -0
  324. package/v2Containers/TestPage/constants.js +7 -0
  325. package/v2Containers/TestPage/index.js +31 -0
  326. package/v2Containers/TestPage/messages.js +13 -0
  327. package/v2Containers/TestPage/reducer.js +21 -0
  328. package/v2Containers/TestPage/sagas.js +11 -0
  329. package/v2Containers/Testv2/actions.js +15 -0
  330. package/v2Containers/Testv2/constants.js +7 -0
  331. package/v2Containers/Testv2/index.js +47 -0
  332. package/v2Containers/Testv2/messages.js +13 -0
  333. package/v2Containers/Testv2/reducer.js +23 -0
  334. package/v2Containers/Testv2/sagas.js +11 -0
  335. package/v2Containers/Testv2/selectors.js +25 -0
  336. package/v2Containers/Testv2/tests/actions.test.js +18 -0
  337. package/v2Containers/Testv2/tests/index.test.js +10 -0
  338. package/v2Containers/Testv2/tests/reducer.test.js +9 -0
  339. package/v2Containers/Testv2/tests/sagas.test.js +15 -0
  340. package/v2Containers/Testv2/tests/selectors.test.js +10 -0
  341. package/v2Containers/WeChat/MapTemplates/_mapTemplates.scss +8 -0
  342. package/v2Containers/WeChat/MapTemplates/actions.js +52 -0
  343. package/v2Containers/WeChat/MapTemplates/constants.js +28 -0
  344. package/v2Containers/WeChat/MapTemplates/index.js +1385 -0
  345. package/v2Containers/WeChat/MapTemplates/messages.js +73 -0
  346. package/v2Containers/WeChat/MapTemplates/reducer.js +74 -0
  347. package/v2Containers/WeChat/MapTemplates/sagas.js +86 -0
  348. package/v2Containers/WeChat/MapTemplates/selectors.js +25 -0
  349. package/v2Containers/WeChat/MapTemplates/tests/actions.test.js +18 -0
  350. package/v2Containers/WeChat/MapTemplates/tests/index.test.js +10 -0
  351. package/v2Containers/WeChat/MapTemplates/tests/reducer.test.js +9 -0
  352. package/v2Containers/WeChat/MapTemplates/tests/sagas.test.js +15 -0
  353. package/v2Containers/WeChat/MapTemplates/tests/selectors.test.js +10 -0
  354. package/v2Containers/WeChat/RichmediaTemplates/Create/_createRichmedia.scss +57 -0
  355. package/v2Containers/WeChat/RichmediaTemplates/Create/actions.js +36 -0
  356. package/v2Containers/WeChat/RichmediaTemplates/Create/constants.js +15 -0
  357. package/v2Containers/WeChat/RichmediaTemplates/Create/index.js +1053 -0
  358. package/v2Containers/WeChat/RichmediaTemplates/Create/messages.js +141 -0
  359. package/v2Containers/WeChat/RichmediaTemplates/Create/reducer.js +60 -0
  360. package/v2Containers/WeChat/RichmediaTemplates/Create/richmediaschema.js +497 -0
  361. package/v2Containers/WeChat/RichmediaTemplates/Create/sagas.js +48 -0
  362. package/v2Containers/WeChat/RichmediaTemplates/Create/selectors.js +37 -0
  363. package/v2Containers/WeChat/RichmediaTemplates/Create/tests/actions.test.js +18 -0
  364. package/v2Containers/WeChat/RichmediaTemplates/Create/tests/index.test.js +10 -0
  365. package/v2Containers/WeChat/RichmediaTemplates/Create/tests/reducer.test.js +9 -0
  366. package/v2Containers/WeChat/RichmediaTemplates/Create/tests/sagas.test.js +15 -0
  367. package/v2Containers/WeChat/RichmediaTemplates/Create/tests/selectors.test.js +10 -0
  368. package/v2Containers/WeChat/RichmediaTemplates/Edit/actions.js +20 -0
  369. package/v2Containers/WeChat/RichmediaTemplates/Edit/constants.js +10 -0
  370. package/v2Containers/WeChat/RichmediaTemplates/Edit/index.js +116 -0
  371. package/v2Containers/WeChat/RichmediaTemplates/Edit/messages.js +13 -0
  372. package/v2Containers/WeChat/RichmediaTemplates/Edit/reducer.js +28 -0
  373. package/v2Containers/WeChat/RichmediaTemplates/Edit/sagas.js +32 -0
  374. package/v2Containers/WeChat/RichmediaTemplates/Edit/selectors.js +30 -0
  375. package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/actions.test.js +18 -0
  376. package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/index.test.js +10 -0
  377. package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/reducer.test.js +9 -0
  378. package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/sagas.test.js +15 -0
  379. package/v2Containers/WeChat/RichmediaTemplates/Edit/tests/selectors.test.js +10 -0
  380. package/v2Containers/WeChat/RichmediaTemplates/View/actions.js +15 -0
  381. package/v2Containers/WeChat/RichmediaTemplates/View/constants.js +7 -0
  382. package/v2Containers/WeChat/RichmediaTemplates/View/index.js +47 -0
  383. package/v2Containers/WeChat/RichmediaTemplates/View/messages.js +13 -0
  384. package/v2Containers/WeChat/RichmediaTemplates/View/reducer.js +23 -0
  385. package/v2Containers/WeChat/RichmediaTemplates/View/sagas.js +11 -0
  386. package/v2Containers/WeChat/RichmediaTemplates/View/selectors.js +25 -0
  387. package/v2Containers/WeChat/RichmediaTemplates/View/tests/actions.test.js +18 -0
  388. package/v2Containers/WeChat/RichmediaTemplates/View/tests/index.test.js +10 -0
  389. package/v2Containers/WeChat/RichmediaTemplates/View/tests/reducer.test.js +9 -0
  390. package/v2Containers/WeChat/RichmediaTemplates/View/tests/sagas.test.js +15 -0
  391. package/v2Containers/WeChat/RichmediaTemplates/View/tests/selectors.test.js +10 -0
@@ -8,13 +8,14 @@ import PropTypes from 'prop-types';
8
8
 
9
9
  import React from 'react';
10
10
  import { connect } from 'react-redux';
11
- import {injectIntl, intlShape } from 'react-intl';
11
+ import Helmet from 'react-helmet';
12
+ import { injectIntl, intlShape } from 'react-intl';
12
13
  import { createStructuredSelector } from 'reselect';
13
14
  import moment from "moment";
14
15
  import _ from 'lodash';
15
16
  import { bindActionCreators } from 'redux';
16
- import { Dropdown, Menu, Modal} from 'antd';
17
- import {CapButton, CapInput, CapIcon, CapSelect, CapPopover, CapSpin, CapCustomCard, CapRow} from '@capillarytech/cap-ui-library';
17
+ import { Row, Select, Spin, Dropdown, Col, Breadcrumb, Menu, Modal} from 'antd';
18
+ import { CapInput, CapButton, CapPopover, CapSelect } from '@capillarytech/cap-ui-library/';
18
19
  import { makeSelectTemplates, makeSelectTemplatesResponse } from './selectors';
19
20
  import { makeSelectCreate as makeSelectCreateSms} from '../Sms/Create/selectors';
20
21
  import { makeSelectCreate as makeSelectCreateMobilePush } from '../MobilePush/Create/selectors';
@@ -42,10 +43,10 @@ import * as commonUtil from '../../utils/common';
42
43
  import SlideBox from '../../components/SlideBox';
43
44
  import Pagination from '../../components/Pagination';
44
45
  import EmailPreview from '../../components/EmailPreview';
45
- import CreativesContainer from '../CreativesContainer';
46
46
  import WechatRichmediaTemplatePreview from '../../components/TemplatePreview/WechatRichmediaTemplatePreview';
47
47
  const MenuItem = Menu.Item;
48
- const {CapCustomCardList} = CapCustomCard;
48
+ const Option = Select.Option;
49
+ const BreadcrumbItem = Breadcrumb.Item;
49
50
 
50
51
  export class Templates extends React.Component { // eslint-disable-line react/prefer-stateless-function
51
52
  constructor(props) {
@@ -70,7 +71,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
70
71
  searchedTemplates: false,
71
72
  defaultAccount: true,
72
73
  modeType: null,
73
- routeParams: null,
74
74
  };
75
75
  this.handleOnHoverItem = this.handleOnHoverItem.bind(this);
76
76
  this.handleOnItemClick = this.handleOnItemClick.bind(this);
@@ -96,7 +96,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
96
96
  componentWillMount() {
97
97
  if (this.state.channel === '') {
98
98
  let channel = '';
99
-
99
+ console.log('templates props', this.props);
100
100
  switch (this.props.route.name.toLowerCase()) {
101
101
  case "sms":
102
102
  channel = 'Sms';
@@ -122,9 +122,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
122
122
  channel = '';
123
123
  }
124
124
  this.setState({ channel });
125
- if (_.isEmpty(this.props.Templates.userList)) {
126
- this.props.actions.getUserList();
127
- }
125
+ this.props.actions.getUserList();
128
126
  }
129
127
  }
130
128
 
@@ -154,10 +152,11 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
154
152
  // this.props.actions.getEdmDefaultTemplates();
155
153
  // }
156
154
  }
157
-
155
+ console.log('added listener templates,', this.props);
158
156
  window.addEventListener("message", this.handleFrameTasks);
159
157
  }
160
158
  componentWillReceiveProps(nextProps) {
159
+ console.log('nextProps templates', nextProps, this.props.Create);
161
160
  const params = {
162
161
  name: this.state.searchText,
163
162
  sortBy: this.state.sortBy,
@@ -187,6 +186,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
187
186
  } else if (nextProps.route.name.toLowerCase() === 'line') {
188
187
  channel = 'Line';
189
188
  }
189
+ // console.log('Next Props details ', nextProps.route.name, channel);
190
190
  this.setState({ channel }, () => {
191
191
  if (this.state.channel.toLowerCase() === 'line' || this.state.channel.toLowerCase() === 'sms' || this.state.channel.toLowerCase() === 'email' || this.state.channel.toLowerCase() === 'ebill' || (this.state.channel.toLowerCase() === 'wechat' && !_.isEmpty(nextProps.Templates.selectedWeChatAccount))) {
192
192
  if (this.state.channel.toLowerCase() === 'wechat' && !_.isEmpty(nextProps.Templates.selectedWeChatAccount)) {
@@ -240,6 +240,12 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
240
240
  this.getAllTemplates({params});
241
241
  }
242
242
  }
243
+ if (this.state.channel.toLowerCase() === "sms" && nextProps.Create && nextProps.Create.response && nextProps.Create.response.templateId && nextProps.Create.response.templateId !== '') {
244
+ const message = getMessageObject('success', `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`, true);
245
+ this.props.globalActions.addMessageToQueue(message);
246
+ this.getAllTemplates({params, resetPage: true});
247
+ this.props.smsActions.clearCreateResponse();
248
+ }
243
249
  if (this.state.channel.toLowerCase() === "mobilepush" && nextProps.CreateMobilePush && nextProps.CreateMobilePush.response && nextProps.CreateMobilePush.response.templateId && nextProps.CreateMobilePush.response.templateId !== '') {
244
250
  if (this.state.channel.toLowerCase() === "mobilepush" && !_.isEmpty(nextProps.Templates.selectedWeChatAccount)) {
245
251
  params.accountId = nextProps.Templates.selectedWeChatAccount.id;
@@ -290,12 +296,14 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
290
296
  }
291
297
  if (!nextProps.Templates.deleteTemplateInProgress && !_.isEqual(nextProps.Templates.deleteTemplateInProgress, this.props.Templates.deleteTemplateInProgress) &&
292
298
  nextProps.Templates.deleteResponse) {
299
+ console.log("delete");
293
300
  const message = getMessageObject('success', `${this.state.channel.toUpperCase()} ${this.props.intl.formatMessage(messages['Template deleted successfully'])}`, true);
294
301
  nextProps.globalActions.addMessageToQueue(message);
295
302
  this.getAllTemplates({params, resetPage: true});
296
303
  }
297
304
 
298
305
  if (!nextProps.Templates.sendingFile && !_.isEqual(this.props.Templates.sendingFile, nextProps.Templates.sendingFile) && !nextProps.Templates.errorSendingFile) {
306
+ console.log('Got html Content ', nextProps.Templates.selectedEmailLayout);
299
307
  const module = this.props.location.query.module ? this.props.location.query.module : 'default';
300
308
  const isLanguageSupport = (this.props.location.query.isLanguageSupport) ? this.props.location.query.isLanguageSupport : true;
301
309
  const isEdmSupport = (this.props.location.query.isEdmSupport !== "false") || false;
@@ -304,10 +312,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
304
312
  this.props.createNew();
305
313
  return;
306
314
  }
307
- this.setState({routeParams: {
315
+ this.props.router.push({
308
316
  pathname: `/${nextProps.route.name.toLowerCase()}/create`,
309
317
  query: type === 'embedded' ? {type: 'embedded', module, isLanguageSupport, isEdmSupport} : {module},
310
- }});
318
+ });
311
319
  }
312
320
 
313
321
  if (!nextProps.Templates.sendingFile && !_.isEqual(this.props.Templates.sendingFile, nextProps.Templates.sendingFile) && nextProps.Templates.errorSendingFile) {
@@ -343,13 +351,14 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
343
351
  }
344
352
 
345
353
  componentWillUnmount() {
354
+ console.log('removed listener templates');
346
355
  window.removeEventListener("message", this.handleFrameTasks);
347
356
  this.props.actions.resetTemplateStoreData();
348
- this.props.globalActions.clearMetaEntities();
349
357
  // this.setState({defaultAccount: false});
350
358
  }
351
359
 
352
- onAccountSelect(value) {
360
+ onAccountSelect(value, option) {
361
+ console.log('Selected Account ', value, option);
353
362
  this.setState({selectedAccount: value}, () => {
354
363
  const params = {
355
364
  name: this.state.searchText,
@@ -368,39 +377,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
368
377
  this.getAllTemplates({params, resetPage: true});
369
378
  });
370
379
  }
371
- onPaginationChange = () => { this.getAllTemplates({getNextPage: true}); }
372
- onCreateComplete = () => {
373
- this.setState({routeParams: null});
374
- }
375
- getCurrentWindow(e) {
376
- const response = {
377
- action: e.action,
378
- value: 'templates',
379
- direction: e.value,
380
- };
381
- parent.postMessage(JSON.stringify(response), '*');
382
- }
383
- getCreativesParams = () => {
384
- const routeParams = this.state.routeParams;
385
- const creativesParams = {mode: ''};
386
- if (!_.isEmpty(routeParams)) {
387
- if (routeParams.pathname.indexOf('create') > -1) {
388
- creativesParams.mode = 'create';
389
- } else if (routeParams.pathname.indexOf('edit') > -1) {
390
- creativesParams.mode = 'edit';
391
- creativesParams._id = routeParams.pathname.split('/')[3];
392
- creativesParams.type = this.state.channel.toUpperCase();
393
- }
394
- }
395
- return creativesParams;
396
- }
397
- getMappedLocale = (locale) => {
398
- const map = {
399
- 'en': 'en',
400
- 'zh-cn': 'zh',
401
- };
402
- return map[locale];
403
- };
380
+
404
381
  setLocale = () => {
405
382
  const user = localStorage.getItem('user');
406
383
  let locale = 'en';
@@ -409,12 +386,22 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
409
386
  }
410
387
  locale = this.getMappedLocale(locale);
411
388
  //locale = 'zh';
412
-
389
+ console.log('Setting final locale as', locale);
413
390
  moment.locale(locale);
414
391
  };
392
+
393
+ getMappedLocale = (locale) => {
394
+ const map = {
395
+ 'en': 'en',
396
+ 'zh-cn': 'zh',
397
+ };
398
+ return map[locale];
399
+ };
400
+
415
401
  getAllTemplates = ({params, getNextPage, resetPage}, resetTemplates) => {
416
402
  let queryParams = params;
417
403
  let page = this.state.page;
404
+ console.log('Get all templates ', this.props.Templates.getAllTemplatesInProgress, resetPage, page, this.state.templatesCount, this.state.perPageLimit, getNextPage);
418
405
  if (resetTemplates) {
419
406
  queryParams.name = this.state.searchText;
420
407
  queryParams.sortBy = this.state.sortBy;
@@ -456,58 +443,37 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
456
443
  });
457
444
  }
458
445
  };
459
- getTemplateDataForGrid = ({templates, handlers, filterContent, channel, isLoading, loadingTip}) => {
460
- const currentChannel = channel.toUpperCase();
461
- const cardDataList = templates.map((template) => {
462
- const templateData =
463
- {
464
- key: `${currentChannel}-card-${template.name}`,
465
- title: <span title={template.name} >{template.name}</span>,
466
- extra: [<CapIcon type="eye" onClick={() => { if (this.props.isFullMode) { handlers.handlePreviewClick(template); } else { this.props.handlePeviewTemplate(template); } }} />],
467
- hoverOption: <CapButton onClick={(e) => handlers.handleEditClick(e, template._id)}>{this.props.intl.formatMessage(this.props.isFullMode ? messages.creativesTemplatesEdit : messages.selectButton)}</CapButton>,
468
- };
469
- if (currentChannel === "SMS") {
470
- templateData.content = template.versions.base['sms-editor'];
471
- } else if (currentChannel === "EMAIL") {
472
- templateData.url = template.versions.base.preview_http_url;
473
- } else if (currentChannel === "MOBILEPUSH" && template.type === "MOBILEPUSH") {
474
- templateData.content = template;
475
- }
476
- return templateData;
477
- });
478
- return (<div>
479
- {filterContent}
480
- <CapSpin spinning={isLoading} tip={loadingTip}>
481
- {!_.isEmpty(templates) && <div className="pagination-container">
482
- <CapCustomCardList key={`${currentChannel}-card-list`} cardList={cardDataList} type={currentChannel} />
483
- </div>}
484
- {(this.state.selectedAccount === '' && _.isEmpty(this.props.Templates.selectedWeChatAccount)) && (this.state.channel.toLowerCase() === 'wechat' || this.state.channel.toLowerCase() === "mobilepush") && <div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh'}}>
485
- <span style={{ fontFamily: 'open-sans', fontSize: '24px', color: '#B5B5B5'}}>{this.props.intl.formatMessage(messages.noAccountMessage)}</span>
486
- </div>}
487
- </CapSpin>
488
-
489
- </div>);
446
+
447
+ getCurrentWindow(e) {
448
+ console.log('in sms templates', e);
449
+ const response = {
450
+ action: e.action,
451
+ value: 'templates',
452
+ direction: e.value,
453
+ };
454
+ parent.postMessage(JSON.stringify(response), '*');
490
455
  }
456
+
491
457
  skipTemplateSelection = (e) => {
458
+ console.log("vvv", e);
492
459
  const type = this.props.location.query.type;
493
460
  const module = (type === 'embedded') ? this.props.location.query.module : 'default';
494
- let routeParams = {};
495
461
  if (this.state.channel.toLowerCase() === 'email') {
496
462
  const isLanguageSupport = this.props.location.query.isLanguageSupport || false;
497
- routeParams = {
463
+ this.props.router.push({
498
464
  pathname: `/email/view`,
499
465
  query: type === 'embedded' ? {type: 'embedded', module, isLanguageSupport} : {},
500
- };
466
+ });
501
467
  } else if (this.state.channel.toLowerCase() === 'sms') {
502
- routeParams = {
468
+ this.props.router.push({
503
469
  pathname: `/sms/view`,
504
470
  query: type === 'embedded' ? {type: 'embedded', module} : {},
505
- };
471
+ });
506
472
  } else if (this.state.channel.toLowerCase() === 'mobilepush') {
507
- routeParams = {
473
+ this.props.router.push({
508
474
  pathname: `/mobilepush/edit/${e.template_id}`,
509
475
  query: type === 'embedded' ? {type: 'embedded', module, account_id: e.account_id} : {},
510
- };
476
+ });
511
477
  } else if (this.state.channel.toLowerCase() === 'wechat') {
512
478
  if (e.template_type && e.template_type === 'RICHMEDIA_WECHAT_TEMPLATE') {
513
479
  this.props.router.push({
@@ -521,18 +487,21 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
521
487
  });
522
488
  }
523
489
  } else if (this.state.channel.toLowerCase() === 'line') {
524
- routeParams = {
490
+ this.props.router.push({
525
491
  pathname: `/line/view/${e.msg_type}/`,
526
492
  query: type === 'embedded' ? {type: 'embedded', module, account_id: e.account_id } : {},
527
- };
493
+ });
528
494
  }
529
- this.setState({loading: true, routeParams});
495
+ this.setState({loading: true});
530
496
  }
531
497
 
532
- handleMenuAction = (item) => {
498
+ handleMenuAction = (item, key) => {
499
+ console.log('Menu Clicked ', item.key, key);
533
500
  if (item.key.toLowerCase() === 'uploadfile') {
534
501
  document.getElementById('filename').click();
502
+ console.log('Upload File');
535
503
  } else if (item.key.toLowerCase() === 'useeditor') {
504
+ console.log('Use Editor');
536
505
  this.toggleEdmEmailTemplateSelection();
537
506
  }
538
507
  };
@@ -540,7 +509,6 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
540
509
  handleBlankTemplateAction = (item, channel) => {
541
510
  const type = this.props.location.query.type;
542
511
  const module = this.props.location.query.module ? this.props.location.query.module : 'default';
543
- let routeParams = {};
544
512
  if (item === "uploadFile") {
545
513
  document.getElementById('filename').click();
546
514
  } else if (item === "editor") {
@@ -548,17 +516,16 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
548
516
  } else if (this.isEnabledInLibraryModule("callCreateFromProps")) {
549
517
  this.props.createNew(item);
550
518
  } else if (item === 'textTemplate') {
551
- routeParams = {
519
+ this.props.router.push({
552
520
  pathname: `/${channel === 'line' ? 'line' : 'mobilepush'}/create/text`,
553
521
  query: type === 'embedded' ? {type: 'embedded', module} : {module},
554
- };
522
+ });
555
523
  } else if (item === 'imageTemplate') {
556
- routeParams = {
524
+ this.props.router.push({
557
525
  pathname: `/${channel === 'line' ? 'line' : 'mobilepush'}/create/image`,
558
526
  query: type === 'embedded' ? {type: 'embedded', module} : {module},
559
- };
527
+ });
560
528
  }
561
- this.setState({routeParams});
562
529
  }
563
530
 
564
531
  handleFileUpload = (e, {files}) => {
@@ -570,11 +537,13 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
570
537
  const module = this.props.location.query.module ? this.props.location.query.module : 'default';
571
538
  const isLanguageSupport = (this.props.location.query.isLanguageSupport) ? this.props.location.query.isLanguageSupport : true;
572
539
  const isEdmSupport = (this.props.location.query.isEdmSupport !== "false") || false;
573
-
540
+ console.log('File Params ', fileExtension);
574
541
  if (supportedZipFormats.indexOf(fileExtension.toLowerCase()) !== -1) {
542
+ console.log('Zip Format got');
575
543
  this.props.actions.handleZipUpload(files[0]);
576
544
  document.getElementById("filename").value = "";
577
545
  } else if (fileExtension === 'html' || fileExtension === 'htm') {
546
+ console.log('html Format got');
578
547
  const reader = new FileReader();
579
548
  reader.onload = () => {
580
549
  const text = reader.result;
@@ -585,10 +554,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
585
554
  this.props.createNew();
586
555
  return;
587
556
  }
588
- this.setState({routeParams: {
557
+ this.props.router.push({
589
558
  pathname: `/${this.props.route.name.toLowerCase()}/create`,
590
559
  query: type === 'embedded' ? {type: 'embedded', module, isLanguageSupport, isEdmSupport} : {module},
591
- }});
560
+ });
592
561
  };
593
562
  reader.readAsText(files[0]);
594
563
  } else {
@@ -700,15 +669,17 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
700
669
  return result;
701
670
  }
702
671
  startLoading(ifEdit) {
672
+ console.log('startLoading', ifEdit);
703
673
  if (ifEdit) {
704
674
  this.setState({loading: true});
705
675
  }
706
676
  }
707
677
 
708
678
  startTemplateCreation(data) {
679
+ console.log('startTemplateCreation', data);
709
680
  if (data.edit) {
710
681
  const ifUnicode = checkUnicode(data.content);
711
-
682
+ console.log('smsDetails', ifUnicode, data.content);
712
683
  const content = data.content;
713
684
  const tempData = {
714
685
  'sms-editor': content,
@@ -723,8 +694,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
723
694
  }
724
695
 
725
696
  handleFrameTasks = (e) => {
697
+ console.log('data listened to is 222', e.data, e);
726
698
  const type = e.data;
727
699
  if (typeof type === 'object') {
700
+ console.log('received something', type);
728
701
  const action = type.action;
729
702
  switch (action) {
730
703
  case "startTemplateCreation":
@@ -748,11 +721,11 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
748
721
  this.getFormData(e);
749
722
  break;
750
723
  case "startTemplateCreation":
751
-
724
+ console.log('Starting to create template');
752
725
  //this.getFormData(e);
753
726
  break;
754
727
  case "validateContent":
755
-
728
+ console.log('validating Content');
756
729
  this.validateContent(e);
757
730
  break;
758
731
  default:
@@ -765,21 +738,19 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
765
738
  const module = this.props.location.query.module ? this.props.location.query.module : 'default';
766
739
  const channel = this.state.channel.toLowerCase();
767
740
  //const keyType = ev.key && ev.key.toLowerCase() !== undefined ? ev.state.toLowerCase() : '';
768
- let routeParams = {};
769
741
  if (this.isEnabledInLibraryModule("callCreateFromProps")) {
770
742
  this.props.createNew();
771
743
  } else if (ev.key && (ev.key.toLowerCase() === "text" || ev.key.toLowerCase() === "image")) {
772
- routeParams = {
744
+ this.props.router.push({
773
745
  pathname: `/${channel === 'line' ? 'line' : 'mobilepush'}/create/${ev.key.toLowerCase()}`,
774
746
  query: type === 'embedded' ? {type: 'embedded', module} : {module},
775
- };
747
+ });
776
748
  } else {
777
- routeParams = {
778
- pathname: `/templates/${this.state.channel.toLowerCase()}/create`,
749
+ this.props.router.push({
750
+ pathname: `/${this.state.channel.toLowerCase()}/create`,
779
751
  query: type === 'embedded' ? {type: 'embedded', module} : {module},
780
- };
752
+ });
781
753
  }
782
- this.setState({routeParams});
783
754
  }
784
755
 
785
756
  menuOnClickEvent(ev) {
@@ -817,6 +788,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
817
788
  }
818
789
 
819
790
  searchTemplate(data) {
791
+ console.log('searching template', data);
820
792
  this.setState({searchText: data}, () => {
821
793
  const params = {
822
794
  name: this.state.searchText,
@@ -870,12 +842,14 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
870
842
  if (this.state.channel.toLowerCase() === 'ebill' || this.state.channel.toLowerCase() === 'email') {
871
843
  this.toggleEmailPreview();
872
844
  } else {
845
+ console.log('toggle Preview ', this.state.previewOpen);
873
846
  this.setState( (prevState) => ({
874
847
  previewOpen: !prevState.previewOpen}));
875
848
  }
876
849
  }
877
850
 
878
851
  toggleEdmEmailTemplateSelection = () => {
852
+ console.log('toggle Selection ', this.state.showEdmEmailTemplates);
879
853
  this.setState( (prevState) => ({
880
854
  showEdmEmailTemplates: !prevState.showEdmEmailTemplates}), () => {
881
855
  this.props.actions.getEdmDefaultTemplates();
@@ -883,27 +857,18 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
883
857
  };
884
858
 
885
859
  deleteTemplate(template) {
860
+ console.log('deleting template', template);
886
861
  this.props.actions.deleteTemplate(this.state.channel.toUpperCase(), template._id);
887
862
  this.setState({actionTemplate: {}});
888
863
  }
889
864
 
890
865
  duplicateTemplate(template) {
866
+ console.log('dup template', template);
891
867
  const duplicateObj = _.cloneDeep(template);
892
868
  duplicateObj.name = `Copy of ${template.name} ${moment().format('MM-DD-YYYY hh:mma')}`;
893
869
  delete duplicateObj._id;
894
- const params = {
895
- name: this.state.searchText,
896
- sortBy: this.state.sortBy,
897
- };
898
870
  if (this.state.channel.toLowerCase() === "sms") {
899
- this.props.smsActions.createTemplate(duplicateObj, (response) => {
900
- if (response && response.templateId) {
901
- const message = getMessageObject('success', `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`, true);
902
- this.props.globalActions.addMessageToQueue(message);
903
- this.getAllTemplates({params, resetPage: true});
904
- this.props.smsActions.clearCreateResponse();
905
- }
906
- });
871
+ this.props.smsActions.createTemplate(duplicateObj);
907
872
  } else if (this.state.channel.toLowerCase() === "mobilepush") {
908
873
  duplicateObj.definition.accountId = this.props.Templates.selectedWeChatAccount.id;
909
874
  this.props.mobilepushActions.createTemplate(duplicateObj);
@@ -917,6 +882,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
917
882
  }
918
883
 
919
884
  handleOnHoverItem(isHovering, id) {
885
+ console.log('parent handle hover', isHovering, id);
920
886
  if (isHovering) {
921
887
  this.setState({hoveredItem: id});
922
888
  } else {
@@ -925,6 +891,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
925
891
  }
926
892
 
927
893
  handleOnItemClick(isClicked, id) {
894
+ console.log('parent handle click', isClicked, id);
928
895
  this.setState({clickedItem: id});
929
896
  }
930
897
 
@@ -936,7 +903,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
936
903
  const isLanguageSupport = (this.props.location.query.isLanguageSupport) ? this.props.location.query.isLanguageSupport : true;
937
904
  const isEdmSupport = (this.props.location.query.isEdmSupport !== "false") || false;
938
905
  let getQuery = '';
939
-
906
+ console.log('Selected EDM Data ', data);
940
907
  this.props.actions.setEdmTemplate(data);
941
908
  if (this.state.channel && this.state.channel.toLowerCase() === 'email') {
942
909
  getQuery = (type === 'embedded') ? {type: 'embedded', module, isLanguageSupport, isEdmSupport} : {module, isLanguageSupport, isEdmSupport};
@@ -947,14 +914,15 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
947
914
  this.props.createNew();
948
915
  return;
949
916
  }
950
- this.setState({routeParams: {
917
+ this.props.router.push({
951
918
  pathname: `/${this.state.channel.toLowerCase()}/create`,
952
919
  query: getQuery,
953
- }});
920
+ });
954
921
  }
955
922
  };
956
923
 
957
924
  handleEditClick(e, id, modeType, path) {
925
+ console.log('inside props****', this.props);
958
926
  if (modeType && modeType !== undefined) {
959
927
  this.setState({modeType});
960
928
  }
@@ -964,8 +932,9 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
964
932
  const isEdmSupport = (this.props.location.query.isEdmSupport !== "false") || false;
965
933
  let getQuery = "";
966
934
  let pathName = path;
935
+ console.log('type**** ', type);
967
936
  e.stopPropagation();
968
-
937
+ console.log('clicked', id);
969
938
  this.props.actions.resetTemplateData();
970
939
  if (this.state.channel.toLowerCase() === 'sms') {
971
940
  pathName = `/sms/edit/${id}`;
@@ -993,10 +962,10 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
993
962
  if (this.state.channel.toLowerCase() === 'ebill') {
994
963
  pathName = `/ebill/edit/${id}`;
995
964
  }
996
- this.setState({routeParams: {
965
+ this.props.router.push({
997
966
  pathname: pathName,
998
967
  query: getQuery,
999
- }});
968
+ });
1000
969
  }
1001
970
  }
1002
971
 
@@ -1013,6 +982,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1013
982
  templateInfo.content = template.versions.base;
1014
983
  templateInfo.appName = this.props.Templates.selectedWeChatAccount.name;
1015
984
  } else if (this.state.channel.toLowerCase() === "email") {
985
+ console.log('Test ', template);
1016
986
  this.props.actions.getTemplateDetails(template._id);
1017
987
  } else if (this.state.channel.toLowerCase() === 'ebill') {
1018
988
  this.props.actions.getTemplateDetails(template._id);
@@ -1086,11 +1056,26 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1086
1056
  content,
1087
1057
  }
1088
1058
  );
1089
- }
1059
+ } /*else if (type === 'embedded' && this.state.channel.toLowerCase() === "mobilepush") {
1060
+ items.push({
1061
+ id: 'blankTemplate',
1062
+ content: <div className={this.state.clickedItem === 'blankTemplate' ? 'sms-text-blurred' : ''}>
1063
+ <div>
1064
+ <div
1065
+ style={{textAlign: 'center', lineHeight: '260px'}}
1066
+ className="sms-text">{this.props.intl.formatMessage(messages.blankTemplate)}</div>
1067
+ </div>
1068
+ {this.state.clickedItem === 'blankTemplate' && <CapButton
1069
+ onClick={() => { this.createTemplate({key: 'text'}); }} key="text" className="edit-button" type="secondary">Text</CapButton>}
1070
+ {this.state.clickedItem === 'blankTemplate' && <CapButton
1071
+ onClick={() => { this.createTemplate({key: 'image'}); }} key="image" className="preview-button" type="secondary">image</CapButton>}
1072
+ </div>,
1073
+ });
1074
+ }*/
1090
1075
  data.map( (template) => {
1091
- //
1076
+ // console.log("Templates ", template._id, " Data ", template);
1092
1077
  const temp = {};
1093
- //
1078
+ // console.log('template ', template);
1094
1079
  const updateDateTime = (moment().format('DD-MM-YYYY') === moment(template.updatedAt).format('DD-MM-YYYY')) ? moment(template.updatedAt).format('hh:mma') : moment(template.updatedAt).format('DD MMM YYYY');
1095
1080
  let content = '';
1096
1081
  temp.id = template._id;
@@ -1116,12 +1101,12 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1116
1101
  );
1117
1102
  }
1118
1103
  } else if (this.state.channel.toLowerCase() === 'email' || this.state.channel.toLowerCase() === 'ebill') {
1119
- //
1120
-
1104
+ // console.log('Data Prepare');
1105
+ console.log('Data Prepare');
1121
1106
  const imgSrc = template && template.versions && template.versions.base ? template.versions.base.preview_http_url : '';
1122
- // const ifPreviewGenerated = template && template.versions && template.versions.base ? template.versions.base.isPreviewGenerated : 0;
1107
+ const ifPreviewGenerated = template && template.versions && template.versions.base ? template.versions.base.isPreviewGenerated : 0;
1123
1108
  content = <img src={imgSrc || ''} alt={this.props.intl.formatMessage(messages.previewGenerateText)} width="100%" height="100%"/>;
1124
-
1109
+ console.log('qwerty template preview', imgSrc, template, ifPreviewGenerated, content);
1125
1110
  temp.content = (
1126
1111
  <div
1127
1112
  className="sms-template-content">
@@ -1234,6 +1219,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1234
1219
  changePreviewDevice = (device) => {
1235
1220
  this.setState({ device });
1236
1221
  };
1222
+
1237
1223
  //Gets called only when creatives gets used as node library
1238
1224
  isEnabledInLibraryModule = (property) => {
1239
1225
  if (this.props.location.query.type === "embedded" && this.props.location.query.module === "library") {
@@ -1290,7 +1276,75 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1290
1276
  />
1291
1277
  );
1292
1278
  }
1279
+
1293
1280
  render() {
1281
+ let pageHeaderText = '';
1282
+ const moduleName = this.props.location.query.module;
1283
+ if (this.props.location.query.type !== 'embedded') {
1284
+ if (this.state.channel.toUpperCase() === 'WECHAT') {
1285
+ pageHeaderText = this.props.intl.formatMessage(messages.wechatHeader);
1286
+ } else if (this.state.channel.toUpperCase() === 'SMS') {
1287
+ pageHeaderText = this.props.intl.formatMessage(messages.smsHeader);
1288
+ } else if (this.state.channel.toUpperCase() === 'EMAIL') {
1289
+ pageHeaderText = this.props.intl.formatMessage(messages.emailHeader);
1290
+ } else if (this.state.channel.toUpperCase() === 'MOBILEPUSH') {
1291
+ pageHeaderText = this.props.intl.formatMessage(messages.mobilepushHeader);
1292
+ } else if (this.state.channel.toUpperCase() === 'EBILL') {
1293
+ pageHeaderText = this.props.intl.formatMessage(messages.ebillHeader);
1294
+ } else if (this.state.channel.toUpperCase() === 'LINE') {
1295
+ pageHeaderText = this.props.intl.formatMessage(messages.lineHeader);
1296
+ }
1297
+ }
1298
+ const options = [
1299
+ {
1300
+ value: "Most Recent",
1301
+ label: this.props.intl.formatMessage(messages.mostRecentOption),
1302
+ },
1303
+ {
1304
+ value: "Alphabetically",
1305
+ label: this.props.intl.formatMessage(messages.alphabeticallyOption),
1306
+ },
1307
+ ];
1308
+ const typeOptions = [
1309
+ {
1310
+ value: "All",
1311
+ label: "All",
1312
+ },
1313
+ {
1314
+ label: "Text",
1315
+ value: 'Text',
1316
+ },
1317
+ {
1318
+ label: "Image",
1319
+ value: "Image",
1320
+ },
1321
+ ];
1322
+ const filterContent = (
1323
+ <div className="action-container">
1324
+ <CapInput
1325
+ className="search-text"
1326
+ style={{width: '210px'}}
1327
+ placeholder={this.props.intl.formatMessage(messages.searchText)}
1328
+ prefix={<i className="material-icons" style={{ margin: '0', fontSize: '16px'}}>search</i>}
1329
+ value={this.state.searchText}
1330
+ onChange={(e) => this.searchTemplate(e.target.value)}
1331
+ />
1332
+ <div className="action-container">
1333
+ <div style={{display: "flex", justifyContent: "space-between", alignItems: 'center'}}>
1334
+ <div className="select-font">{this.props.intl.formatMessage(messages.sortBy)}</div>
1335
+ <CapSelect key={"select-account"} style={{width: '120px', marginLeft: '16px', minWidth: 'initial'}} defaultValue="Most Recent" onChange={this.handleSortBy} options={options}>
1336
+ </CapSelect>
1337
+ </div>
1338
+ { (this.state.channel.toLowerCase() === 'mobilepush' || this.state.channel.toLowerCase() === 'line') &&
1339
+ <div style={{display: "flex", justifyContent: "space-between", alignItems: 'center', marginLeft: '16px'}}>
1340
+ <div className="select-font">Type</div>
1341
+ <CapSelect key={"select-type"} style={{width: '120px', marginLeft: '16px', minWidth: 'initial'}} defaultValue="All" onChange={this.handleType} options={typeOptions}>
1342
+ </CapSelect>
1343
+ </div>
1344
+ }
1345
+ </div>
1346
+ </div>
1347
+ );
1294
1348
  const accountOptions = [];
1295
1349
  if ((this.state.channel.toUpperCase() === 'WECHAT' || this.state.channel.toUpperCase() === "MOBILEPUSH") && !_.isEmpty(this.props.Templates.weCrmAccounts)) {
1296
1350
  _.forEach(this.props.Templates.weCrmAccounts, (account) => {
@@ -1298,55 +1352,53 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1298
1352
  if (this.props.location.query.type === 'embedded' && (!this.props.location.query.module || (this.props.location.query.module && this.props.location.query.module !== 'library'))) {
1299
1353
  if (this.props.location.query.source_account_id && account.sourceAccountIdentifier === this.props.location.query.source_account_id) {
1300
1354
  accountOptions.push(
1301
- { key: this.state.channel.toUpperCase() === "MOBILEPUSH" ? account.id : account.uuid,
1302
- label: account.name,
1303
- value: account.name,
1304
- }
1355
+ <Option key={this.state.channel.toUpperCase() === "MOBILEPUSH" ? account.id : account.uuid} value={account.name}>{account.name}</Option>
1305
1356
  );
1306
1357
  } else if (this.props.location.query.module && (this.state.channel.toUpperCase() === "WECHAT" || this.state.channel.toUpperCase() === "MOBILEPUSH")) {
1307
1358
  accountOptions.push(
1308
- {
1309
- key: this.state.channel.toUpperCase() === "MOBILEPUSH" ? account.id : account.uuid,
1310
- value: account.name,
1311
- label: account.name,
1312
- }
1359
+ <Option key={this.state.channel.toUpperCase() === "MOBILEPUSH" ? account.id : account.uuid} value={account.name}>{account.name}</Option>
1313
1360
  );
1314
1361
  }
1315
1362
  } else {
1316
1363
  accountOptions.push(
1317
- {
1318
- key: this.state.channel.toUpperCase() === "MOBILEPUSH" ? account.id : account.uuid,
1319
- value: account.name,
1320
- label: account.name,
1321
- }
1364
+ <Option key={this.state.channel.toUpperCase() === "MOBILEPUSH" ? account.id : account.uuid} value={account.name}>{account.name}</Option>
1322
1365
  );
1323
1366
  }
1324
1367
  }
1325
1368
  });
1326
1369
  }
1370
+ let templateText = this.state.channel.toUpperCase() === 'WECHAT' ? this.props.intl.formatMessage(messages.selectWechatHeader) : this.props.intl.formatMessage(messages.selectSmsHeader);
1371
+
1372
+ let titleText = this.state.channel.toUpperCase() === 'SMS' ? this.props.intl.formatMessage(messages.smsChannelTemplatesHeader) : this.props.intl.formatMessage(messages.wechatChannelTemplatesHeader);
1373
+ if (this.state.channel.toUpperCase() === "MOBILEPUSH") {
1374
+ templateText = "Select Mobile Push Template";
1375
+ titleText = "Mobile push";
1376
+ } else if (this.state.channel.toUpperCase() === "EMAIL") {
1377
+ templateText = "Select Email Template";
1378
+ titleText = "Email";
1379
+ } else if (this.state.channel.toUpperCase() === "EBILL") {
1380
+ templateText = "Select Ebill Template";
1381
+ titleText = "Ebill";
1382
+ } else if (this.state.channel.toUpperCase() === "LINE") {
1383
+ templateText = "Select Line Template";
1384
+ titleText = "Line";
1385
+ }
1327
1386
  const pageHeader = (
1328
1387
  <div>
1388
+ {(this.props.location.query.type !== 'embedded') ? `${pageHeaderText}` : templateText}
1329
1389
  {(this.isEnabledInLibraryModule("showAccountSelection") || (((this.state.channel.toUpperCase() === 'WECHAT' || this.state.channel.toUpperCase() === "MOBILEPUSH") && (this.props.location.query.type !== 'embedded') && !_.isEmpty(this.props.Templates.weCrmAccounts)))) &&
1330
- <CapSelect
1331
- className="selectAccount"
1332
- onSelect={this.onAccountSelect}
1333
- value={this.props.Templates.selectedWeChatAccount ? this.props.Templates.selectedWeChatAccount.name : undefined}
1334
- placeholder={this.props.intl.formatMessage(messages.selectAccount)}
1335
- options={accountOptions}
1336
- />
1337
- }
1390
+ <Select className="selectAccount" onSelect={this.onAccountSelect} value={this.props.Templates.selectedWeChatAccount ? this.props.Templates.selectedWeChatAccount.name : undefined} placeholder={this.props.intl.formatMessage(messages.selectAccount)}>
1391
+ {accountOptions}
1392
+ </Select>}
1338
1393
  </div>
1339
1394
  );
1340
1395
  const pageHeaderDvs = (
1341
1396
  <div>
1397
+ {(this.props.location.query.type === 'embedded' && moduleName === 'dvs') ? `${templateText}` : pageHeaderText}
1342
1398
  {((this.state.channel.toUpperCase() === 'WECHAT' || this.state.channel.toUpperCase() === "MOBILEPUSH") && (this.props.location.query.type === 'embedded') && !_.isEmpty(this.props.Templates.weCrmAccounts)) &&
1343
- <CapSelect
1344
- className="selectAccount"
1345
- onSelect={this.onAccountSelect}
1346
- value={this.props.Templates.selectedWeChatAccount ? this.props.Templates.selectedWeChatAccount.name : undefined} placeholder={this.props.intl.formatMessage(messages.selectAccount)}
1347
- options={accountOptions}
1348
- />
1349
- }
1399
+ <Select className="selectAccount" onSelect={this.onAccountSelect} value={this.props.Templates.selectedWeChatAccount ? this.props.Templates.selectedWeChatAccount.name : undefined} placeholder={this.props.intl.formatMessage(messages.selectAccount)}>
1400
+ {accountOptions}
1401
+ </Select>}
1350
1402
  </div>
1351
1403
  );
1352
1404
  let actionButton = '';
@@ -1471,28 +1523,7 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1471
1523
  >
1472
1524
  </CardGrid>
1473
1525
  );
1474
- const filterContent = (
1475
- <div className="action-container">
1476
- <CapInput.Search
1477
- className="search-text"
1478
- style={{width: '210px'}}
1479
- placeholder={this.props.intl.formatMessage(messages.searchText)}
1480
- value={this.state.searchText}
1481
- onChange={(e) => this.searchTemplate(e.target.value)}
1482
- />
1483
- <div style={{display: "flex", justifyContent: "space-between", alignItems: 'center'}}>
1484
- {(this.props.location.query.type === 'embedded' ) ? pageHeaderDvs : pageHeader}
1485
- <CapButton
1486
- type={this.props.isFullMode ? "primary" : "secondary"}
1487
- disabled={isLoading || _.isEmpty(this.props.Templates.selectedWeChatAccount)}
1488
- style={{marginLeft: '8px'}}
1489
- onClick={(ev) => this.props.isFullMode ? this.createTemplate(ev) : this.handleBlankTemplateAction()} >
1490
- { this.props.intl.formatMessage(messages.createNewActionButton) }
1491
- </CapButton>
1492
- </div>
1493
1526
 
1494
- </div>
1495
- );
1496
1527
  let htmlPreviewContent = "";
1497
1528
  if (this.state.channel.toLowerCase() === 'ebill') {
1498
1529
  htmlPreviewContent = this.state.previewTemplate && this.state.previewTemplate.versions && this.state.previewTemplate.versions.base && this.state.previewTemplate.versions.base['ebill-editor'];
@@ -1503,20 +1534,36 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1503
1534
  const templateList = this.populateTemplatesList(this.props.TemplatesList, true);
1504
1535
 
1505
1536
  const isSearch = this.props.Templates.isSearch;
1506
- const creativesParams = this.getCreativesParams();
1507
- const {isFullMode, route} = this.props;
1508
- const loadingTip = (this.props.Templates.sendingFile && (this.state.channel.toLowerCase() === 'email' || this.state.channel.toLowerCase() === 'ebill')) ? this.props.intl.formatMessage(messages.uploadingFile) : this.props.intl.formatMessage(messages.gettingAllTemplates);
1509
1537
  return (
1510
1538
  <div>
1511
- <input type="file" id="filename" style={{ display: 'none'}} accept=".zip, .html, .htm" onChange={(event) => this.handleFileUpload(event, {files: event.target.files})} />
1512
-
1513
-
1514
- <CapRow>
1515
- <Pagination onPageChange={this.onPaginationChange} paginationSelector="pagination-container">
1516
- {this.getTemplateDataForGrid({isLoading, loadingTip, channel: this.state.channel, templates: this.props.TemplatesList, filterContent, handlers: {handlePreviewClick: this.handlePreviewClick, handleEditClick: this.handleEditClick}})}
1517
- </Pagination>
1518
- {!this.props.renderNewCardGrid && ((templateList && templateList.length > 0) || isSearch) && // old UI GRID
1519
- <Pagination onPageChange={this.onPaginationChange} paginationSelector="pagination-container">
1539
+ <Spin
1540
+ tip={(this.props.Templates.sendingFile && (this.state.channel.toLowerCase() === 'email' || this.state.channel.toLowerCase() === 'ebill')) ? this.props.intl.formatMessage(messages.uploadingFile) : this.props.intl.formatMessage(messages.gettingAllTemplates)}
1541
+ spinning={isLoading}
1542
+ >
1543
+ <input type="file" id="filename" style={{ display: 'none'}} accept=".zip, .html, .htm" onChange={(event) => this.handleFileUpload(event, {files: event.target.files})} />
1544
+ <Row>
1545
+ <Col>
1546
+ {this.props.location.query.type !== "embedded" &&
1547
+ <Breadcrumb>
1548
+ <BreadcrumbItem>{this.props.intl.formatMessage(messages.campaigns)}</BreadcrumbItem>
1549
+ <BreadcrumbItem>{this.props.intl.formatMessage(messages.creatives)}</BreadcrumbItem>
1550
+ <BreadcrumbItem>{ this.state.channel }</BreadcrumbItem>
1551
+ </Breadcrumb>
1552
+ }
1553
+ </Col>
1554
+ </Row>
1555
+ <Row className="template-header-container">
1556
+ <div className="template-header">{(this.props.location.query.type === 'embedded' && moduleName === 'dvs') ? pageHeaderDvs : pageHeader}</div>
1557
+ {actionButton}
1558
+ </Row>
1559
+ <Row>
1560
+ <Helmet
1561
+ title={titleText}
1562
+ meta={[
1563
+ { name: 'description', content: 'Description of Templates' },
1564
+ ]}
1565
+ />
1566
+ {((templateList && templateList.length > 0) || isSearch) && <Pagination onPageChange={() => { console.log('getting all templates pagination'); this.getAllTemplates({getNextPage: true}); }} paginationSelector="pagination-container">
1520
1567
  <CardGrid
1521
1568
  className={this.state.channel.toLowerCase() === "mobilepush" ? "mobilepush-templates" : ""}
1522
1569
  listItem={templateList}
@@ -1524,80 +1571,67 @@ export class Templates extends React.Component { // eslint-disable-line react/pr
1524
1571
  onHoverItem={this.handleOnHoverItem}
1525
1572
  onItemClick={this.handleOnItemClick}
1526
1573
  enablePagination
1527
- isLoading={isLoading}
1528
- loadingTip={loadingTip}
1529
1574
  >
1530
1575
  </CardGrid>
1531
1576
  </Pagination>}
1532
- {(((this.state.selectedAccount !== '' && !_.isEmpty(this.props.Templates.selectedWeChatAccount) && this.state.channel.toLowerCase() === 'wechat') || this.state.channel.toLowerCase() !== 'wechat') && _.isEmpty(this.props.TemplatesList)) && !this.props.Templates.getAllTemplatesInProgress && <div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh'}}>
1533
- <span style={{ fontFamily: 'open-sans', fontSize: '24px', color: '#B5B5B5'}}>{this.props.intl.formatMessage(messages.noTemplatesMessage)}</span>
1577
+ {(this.state.selectedAccount === '' && _.isEmpty(this.props.Templates.selectedWeChatAccount)) && (this.state.channel.toLowerCase() === 'wechat' || this.state.channel.toLowerCase() === "mobilepush") && <div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh'}}>
1578
+ <span style={{ fontFamily: 'open-sans', fontSize: '24px', color: '#B5B5B5'}}>{this.props.intl.formatMessage(messages.noAccountMessage)}</span>
1534
1579
  </div>}
1535
- </CapRow>
1536
- <CapRow>
1537
- {!_.isEmpty(creativesParams.mode) && isFullMode && //creatives container for fullmode
1538
- <CreativesContainer
1539
- key={creativesParams.mode}
1540
- messageDetails={{type: "default"}}
1541
- creativesMode={creativesParams.mode}
1542
- messages={messages}
1543
- isFullMode={isFullMode}
1544
- templateData={creativesParams}
1545
- getCreativesData={this.onCreateComplete}
1546
- channel={route.name.toUpperCase()}
1547
- handleCloseCreatives={this.onCreateComplete}/>
1548
- }
1549
- </CapRow>
1550
- <CapRow>
1551
- {this.state.channel.toLowerCase() === 'wechat' && this.state.previewTemplate && this.state.previewTemplate.definition && this.state.previewTemplate.definition.msgcontent && this.state.previewTemplate.definition.msgcontent === 'RICH_MEDIA_WECHAT' ?
1552
- <WechatRichmediaTemplatePreview
1553
- show={this.state.previewOpen}
1554
- closeSlideBox={this.togglePreview}
1555
- header={this.state.previewTemplate.name}
1556
- width={30}
1557
- showSlidebox
1558
- const type={this.props.location && this.props.location.query.type ? this.props.location.query.type : ''}
1559
- content={this.state.previewTemplate.versions.base.mediaList}
1560
- onEditClick={this.handleEditClick}
1561
- showEdit
1562
- templateId={this.state.previewTemplate._id}
1563
- path={`/wechat/richmedia/edit/${this.state.previewTemplate._id}`}
1564
- />
1565
- :
1566
- <PreviewSideBar
1567
- showPreview={this.state.previewOpen}
1568
- templateData={this.state.previewTemplate}
1569
- channel={this.state.channel}
1570
- handleClose={this.togglePreview}
1580
+ {(((this.state.selectedAccount !== '' && !_.isEmpty(this.props.Templates.selectedWeChatAccount) && this.state.channel.toLowerCase() === 'wechat') || this.state.channel.toLowerCase() !== 'wechat') && _.isEmpty(this.props.TemplatesList)) && !this.props.Templates.getAllTemplatesInProgress && <div style={{ height: '65vh', textAlign: 'center', lineHeight: '65vh'}}>
1581
+ <span style={{ fontFamily: 'open-sans', fontSize: '24px', color: '#B5B5B5'}}>{this.props.intl.formatMessage(messages.noTemplatesMessage)}</span>
1582
+ </div>}
1583
+ </Row>
1584
+ <Row>
1585
+ {this.state.channel.toLowerCase() === 'wechat' && this.state.previewTemplate && this.state.previewTemplate.definition && this.state.previewTemplate.definition.msgcontent && this.state.previewTemplate.definition.msgcontent === 'RICH_MEDIA_WECHAT' ?
1586
+ <WechatRichmediaTemplatePreview
1587
+ show={this.state.previewOpen}
1588
+ closeSlideBox={this.togglePreview}
1589
+ header={this.state.previewTemplate.name}
1590
+ width={30}
1591
+ showSlidebox
1592
+ const type={this.props.location && this.props.location.query.type ? this.props.location.query.type : ''}
1593
+ content={this.state.previewTemplate.versions.base.mediaList}
1571
1594
  onEditClick={this.handleEditClick}
1572
- embedded={this.props.location.query.type === 'embedded'}
1573
- onDuplicateClick={this.duplicateTemplate}
1574
- location={this.props.location}
1575
- >
1576
- </PreviewSideBar>
1595
+ showEdit
1596
+ templateId={this.state.previewTemplate._id}
1597
+ path={`/wechat/richmedia/edit/${this.state.previewTemplate._id}`}
1598
+ />
1599
+ :
1600
+ <PreviewSideBar
1601
+ showPreview={this.state.previewOpen}
1602
+ templateData={this.state.previewTemplate}
1603
+ channel={this.state.channel}
1604
+ handleClose={this.togglePreview}
1605
+ onEditClick={this.handleEditClick}
1606
+ embedded={this.props.location.query.type === 'embedded'}
1607
+ onDuplicateClick={this.duplicateTemplate}
1608
+ location={this.props.location}
1609
+ >
1610
+ </PreviewSideBar>
1577
1611
 
1578
- }
1579
- {(this.state.channel.toLowerCase() === 'ebill' || this.state.channel.toLowerCase() === 'email') && htmlPreviewContent && <EmailPreview
1580
- header={previewHeader}
1581
- content={htmlPreviewContent}
1582
- show={this.state.showHtmlPreview}
1583
- device={this.state.device}
1584
- handleClose={this.toggleEmailPreview}
1585
- changePreviewDevice={this.changePreviewDevice}
1586
- lastModified={this.state.previewTemplate ? this.state.previewTemplate.updatedAt : ''}
1587
- updatedByName={commonUtil.getUserNameById(parseInt(this.state.previewTemplate.updatedBy, 10), commonUtil.getMergedUserList(this.props.Templates.userList))}
1588
- />}
1589
- <SlideBox
1590
- header={(<h3>{this.props.intl.formatMessage(messages.layoutSelection)}</h3>)}
1591
- width={60}
1592
- content={cmsTemplateSelectionContent}
1593
- show={this.state.showEdmEmailTemplates}
1594
- handleClose={this.toggleEdmEmailTemplateSelection}
1595
- loadingText={"Loading EDM Templates"}
1596
- isLoading={this.props.Templates.getCmsTemplatesInProgress}
1612
+ }
1613
+ {(this.state.channel.toLowerCase() === 'ebill' || this.state.channel.toLowerCase() === 'email') && htmlPreviewContent && <EmailPreview
1614
+ header={previewHeader}
1615
+ content={htmlPreviewContent}
1616
+ show={this.state.showHtmlPreview}
1617
+ device={this.state.device}
1618
+ handleClose={this.toggleEmailPreview}
1619
+ changePreviewDevice={this.changePreviewDevice}
1620
+ lastModified={this.state.previewTemplate ? this.state.previewTemplate.updatedAt : ''}
1621
+ updatedByName={commonUtil.getUserNameById(parseInt(this.state.previewTemplate.updatedBy, 10), commonUtil.getMergedUserList(this.props.Templates.userList))}
1622
+ />}
1623
+ <SlideBox
1624
+ header={(<h3>{this.props.intl.formatMessage(messages.layoutSelection)}</h3>)}
1625
+ width={60}
1626
+ content={cmsTemplateSelectionContent}
1627
+ show={this.state.showEdmEmailTemplates}
1628
+ handleClose={this.toggleEdmEmailTemplateSelection}
1629
+ loadingText={"Loading EDM Templates"}
1630
+ isLoading={this.props.Templates.getCmsTemplatesInProgress}
1597
1631
  />
1598
- {this.renderDeleteConfirmationModal()}
1599
- </CapRow>
1600
-
1632
+ {this.renderDeleteConfirmationModal()}
1633
+ </Row>
1634
+ </Spin>
1601
1635
  </div>
1602
1636
  );
1603
1637
  }
@@ -1613,6 +1647,7 @@ Templates.propTypes = {
1613
1647
  TemplatesList: PropTypes.array,
1614
1648
  Templates: PropTypes.object,
1615
1649
  route: PropTypes.object,
1650
+ router: PropTypes.object,
1616
1651
  Create: PropTypes.object,
1617
1652
  location: PropTypes.object,
1618
1653
  globalActions: PropTypes.object,
@@ -1621,10 +1656,6 @@ Templates.propTypes = {
1621
1656
  createNew: PropTypes.func,
1622
1657
  onSelectTemplate: PropTypes.func,
1623
1658
  lineActions: PropTypes.object,
1624
- isFullMode: PropTypes.bool,
1625
- renderNewCardGrid: PropTypes.func,
1626
- handlePeviewTemplate: PropTypes.func,
1627
- router: PropTypes.object,
1628
1659
  };
1629
1660
 
1630
1661
  const mapStateToProps = createStructuredSelector({