@capillarytech/creatives-library 8.0.166 → 8.0.167

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 (294) hide show
  1. package/components/BreadCrumbs/index.js +65 -0
  2. package/components/BreadCrumbs/messages.js +13 -0
  3. package/components/CapTagList/index.js +235 -0
  4. package/components/CapTagList/messages.js +45 -0
  5. package/components/Card/_customCard.scss +40 -0
  6. package/components/Card/index.js +78 -0
  7. package/components/Card/tests/__snapshots__/index.test.js.snap +22 -0
  8. package/components/Card/tests/index.test.js +20 -0
  9. package/components/CardGrid/index.js +71 -0
  10. package/components/Ckeditor/index.js +238 -0
  11. package/components/Ckeditor/messages.js +13 -0
  12. package/components/Ckeditor/style.scss +3 -0
  13. package/components/Component/index.js +29 -0
  14. package/components/CustomPopOver/index.js +81 -0
  15. package/components/CustomPopOver/messages.js +17 -0
  16. package/components/DateFilter/index.js +349 -0
  17. package/components/DateFilter/messages.js +57 -0
  18. package/components/DateRange/index.js +114 -0
  19. package/components/DateRange/messages.js +25 -0
  20. package/components/Edmeditor/index.js +65 -0
  21. package/components/Edmeditor/messages.js +13 -0
  22. package/components/EmailPreview/_emailPreview.scss +119 -0
  23. package/components/EmailPreview/assets/images/iPad.svg +10 -0
  24. package/components/EmailPreview/assets/images/mobile.png +0 -0
  25. package/components/EmailPreview/index.js +107 -0
  26. package/components/EmailPreview/messages.js +33 -0
  27. package/components/Footer/index.js +27 -0
  28. package/components/Footer/messages.js +13 -0
  29. package/components/FormBuilder/_formBuilder.scss +83 -0
  30. package/components/FormBuilder/index.js +3279 -0
  31. package/components/FormBuilder/messages.js +61 -0
  32. package/components/Header/index.js +44 -0
  33. package/components/Header/messages.js +29 -0
  34. package/components/ImagePreview/_imagePreview.scss +63 -0
  35. package/components/ImagePreview/index.js +52 -0
  36. package/components/ImagePreview/messages.js +17 -0
  37. package/components/PageHeader/_pageHeader.scss +22 -0
  38. package/components/PageHeader/index.js +37 -0
  39. package/components/PageHeader/messages.js +13 -0
  40. package/components/Pagination/_pagination.scss +5 -0
  41. package/components/Pagination/index.js +49 -0
  42. package/components/PreviewSideBar/_previewsidebar.scss +28 -0
  43. package/components/PreviewSideBar/index.js +152 -0
  44. package/components/PreviewSideBar/messages.js +41 -0
  45. package/components/Sidebar/_sidebar.scss +115 -0
  46. package/components/Sidebar/index.js +214 -0
  47. package/components/Sidebar/messages.js +21 -0
  48. package/components/SlideBox/_slideBox.scss +63 -0
  49. package/components/SlideBox/index.js +47 -0
  50. package/components/SlideBox/tests/index.test.js +103 -0
  51. package/components/SmsEditor/index.js +55 -0
  52. package/components/SmsTest/index.js +117 -0
  53. package/components/SmsTest/messages.js +21 -0
  54. package/components/TemplatePreview/WechatRichmediaTemplatePreview/_wechatRichmediaTemplatePrev.scss +42 -0
  55. package/components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +141 -0
  56. package/components/TemplatePreview/WechatRichmediaTemplatePreview/messages.js +21 -0
  57. package/components/TemplatePreview/_templatePreview.scss +642 -0
  58. package/components/TemplatePreview/assets/images/WECHAT_5x.png +0 -0
  59. package/components/TemplatePreview/assets/images/androidPushMessage.svg +45 -0
  60. package/components/TemplatePreview/assets/images/home-screen-android.svg +21 -0
  61. package/components/TemplatePreview/assets/images/home-screen-ios.svg +16 -0
  62. package/components/TemplatePreview/assets/images/iPhonePushMessage.svg +135 -0
  63. package/components/TemplatePreview/assets/images/mobile.svg +24 -0
  64. package/components/TemplatePreview/assets/images/sms-body.png +0 -0
  65. package/components/TemplatePreview/assets/images/sms-icon.png +0 -0
  66. package/components/TemplatePreview/assets/images/sms_mobile.png +0 -0
  67. package/components/TemplatePreview/assets/images/sms_mobile_android.svg +22 -0
  68. package/components/TemplatePreview/assets/images/sms_mobile_ios.svg +16 -0
  69. package/components/TemplatePreview/assets/images/user-icon.svg +19 -0
  70. package/components/TemplatePreview/assets/images/wechat-mobile.svg +78 -0
  71. package/components/TemplatePreview/assets/images/wechat_mobile_android.svg +20 -0
  72. package/components/TemplatePreview/index.js +617 -0
  73. package/components/TemplatePreview/messages.js +78 -0
  74. package/components/Toastr/index.js +60 -0
  75. package/components/Toastr/messages.js +13 -0
  76. package/components/ToastrMessage/index.js +113 -0
  77. package/components/ToastrMessage/messages.js +17 -0
  78. package/components/TopBar/_topbar.scss +46 -0
  79. package/components/TopBar/assets/images/capillary_logo.png +0 -0
  80. package/components/TopBar/assets/images/old_capillary_logo.png +0 -0
  81. package/components/TopBar/index.js +113 -0
  82. package/components/TopBar/messages.js +29 -0
  83. package/containers/App/actions.js +7 -0
  84. package/containers/App/constants.js +114 -0
  85. package/containers/App/index.js +52 -0
  86. package/containers/App/reducer.js +19 -0
  87. package/containers/App/sagas.js +31 -0
  88. package/containers/App/selectors.js +25 -0
  89. package/containers/App/test/saga.test.js +11 -0
  90. package/containers/Assets/Gallery/_gallery.scss +126 -0
  91. package/containers/Assets/Gallery/actions.js +37 -0
  92. package/containers/Assets/Gallery/constants.js +23 -0
  93. package/containers/Assets/Gallery/index.js +473 -0
  94. package/containers/Assets/Gallery/messages.js +93 -0
  95. package/containers/Assets/Gallery/reducer.js +81 -0
  96. package/containers/Assets/Gallery/sagas.js +80 -0
  97. package/containers/Assets/Gallery/selectors.js +25 -0
  98. package/containers/Assets/Gallery/tests/__snapshots__/reducer.test.js.snap +9 -0
  99. package/containers/Assets/Gallery/tests/actions.test.js +25 -0
  100. package/containers/Assets/Gallery/tests/reducer.test.js +96 -0
  101. package/containers/Assets/Gallery/tests/saga.test.js +157 -0
  102. package/containers/Cap/actions.js +66 -0
  103. package/containers/Cap/constants.js +25 -0
  104. package/containers/Cap/index.js +402 -0
  105. package/containers/Cap/messages.js +75 -0
  106. package/containers/Cap/reducer.js +113 -0
  107. package/containers/Cap/sagas.js +159 -0
  108. package/containers/Cap/selectors.js +75 -0
  109. package/containers/Cap/tests/__snapshots__/index.test.js.snap +2270 -0
  110. package/containers/Cap/tests/index.test.js +22 -0
  111. package/containers/Cap/tests/saga.test.js +284 -0
  112. package/containers/Dashboard/actions.js +15 -0
  113. package/containers/Dashboard/constants.js +7 -0
  114. package/containers/Dashboard/index.js +76 -0
  115. package/containers/Dashboard/messages.js +13 -0
  116. package/containers/Dashboard/reducer.js +21 -0
  117. package/containers/Dashboard/sagas.js +17 -0
  118. package/containers/Dashboard/selectors.js +25 -0
  119. package/containers/Dashboard/test/saga.test.js +9 -0
  120. package/containers/Ebill/_ebill.scss +5 -0
  121. package/containers/Ebill/actions.js +43 -0
  122. package/containers/Ebill/constants.js +20 -0
  123. package/containers/Ebill/index.js +1278 -0
  124. package/containers/Ebill/messages.js +77 -0
  125. package/containers/Ebill/reducer.js +72 -0
  126. package/containers/Ebill/sagas.js +74 -0
  127. package/containers/Ebill/selectors.js +25 -0
  128. package/containers/Ebill/test/saga.test.js +11 -0
  129. package/containers/Email/_email.scss +141 -0
  130. package/containers/Email/actions.js +81 -0
  131. package/containers/Email/constants.js +36 -0
  132. package/containers/Email/index.js +3325 -0
  133. package/containers/Email/messages.js +289 -0
  134. package/containers/Email/reducer.js +142 -0
  135. package/containers/Email/sagas.js +135 -0
  136. package/containers/Email/selectors.js +31 -0
  137. package/containers/Email/test/saga.test.js +671 -0
  138. package/containers/LanguageProvider/actions.js +17 -0
  139. package/containers/LanguageProvider/constants.js +8 -0
  140. package/containers/LanguageProvider/index.js +80 -0
  141. package/containers/LanguageProvider/reducer.js +30 -0
  142. package/containers/LanguageProvider/selectors.js +20 -0
  143. package/containers/LanguageProvider/tests/actions.test.js +19 -0
  144. package/containers/LanguageProvider/tests/index.test.js +78 -0
  145. package/containers/LanguageProvider/tests/reducer.test.js +20 -0
  146. package/containers/LanguageProvider/tests/selectors.test.js +15 -0
  147. package/containers/Line/Create/_lineCreate.scss +54 -0
  148. package/containers/Line/Create/actions.js +90 -0
  149. package/containers/Line/Create/constants.js +39 -0
  150. package/containers/Line/Create/index.js +836 -0
  151. package/containers/Line/Create/messages.js +189 -0
  152. package/containers/Line/Create/reducer.js +99 -0
  153. package/containers/Line/Create/sagas.js +121 -0
  154. package/containers/Line/Create/selectors.js +36 -0
  155. package/containers/Line/Create/tests/saga.test.js +202 -0
  156. package/containers/Line/Edit/_lineEdit.scss +35 -0
  157. package/containers/Line/Edit/actions.js +79 -0
  158. package/containers/Line/Edit/constants.js +27 -0
  159. package/containers/Line/Edit/index.js +1050 -0
  160. package/containers/Line/Edit/messages.js +177 -0
  161. package/containers/Line/Edit/reducer.js +83 -0
  162. package/containers/Line/Edit/sagas.js +80 -0
  163. package/containers/Line/Edit/selectors.js +29 -0
  164. package/containers/Line/Edit/test/saga.test.js +160 -0
  165. package/containers/Login/assets/images/capillary_logo.png +0 -0
  166. package/containers/Login/components/LoginForm/index.js +62 -0
  167. package/containers/Login/components/LoginForm/messages.js +33 -0
  168. package/containers/Login/index.js +130 -0
  169. package/containers/Login/messages.js +25 -0
  170. package/containers/Login/selectors.js +25 -0
  171. package/containers/MobilePush/Create/_mobilePushCreate.scss +39 -0
  172. package/containers/MobilePush/Create/actions.js +46 -0
  173. package/containers/MobilePush/Create/constants.js +23 -0
  174. package/containers/MobilePush/Create/index.js +2303 -0
  175. package/containers/MobilePush/Create/messages.js +269 -0
  176. package/containers/MobilePush/Create/reducer.js +70 -0
  177. package/containers/MobilePush/Create/sagas.js +74 -0
  178. package/containers/MobilePush/Create/selectors.js +28 -0
  179. package/containers/MobilePush/Create/test/saga.test.js +19 -0
  180. package/containers/MobilePush/Edit/_mobilePushCreate.scss +39 -0
  181. package/containers/MobilePush/Edit/actions.js +91 -0
  182. package/containers/MobilePush/Edit/constants.js +35 -0
  183. package/containers/MobilePush/Edit/index.js +2601 -0
  184. package/containers/MobilePush/Edit/messages.js +266 -0
  185. package/containers/MobilePush/Edit/reducer.js +112 -0
  186. package/containers/MobilePush/Edit/sagas.js +126 -0
  187. package/containers/MobilePush/Edit/selectors.js +29 -0
  188. package/containers/MobilePush/Edit/tests/saga.test.js +255 -0
  189. package/containers/NotFoundPage/index.js +25 -0
  190. package/containers/NotFoundPage/messages.js +13 -0
  191. package/containers/NotFoundPage/tests/index.test.js +17 -0
  192. package/containers/Sms/Create/_smsCreate.scss +42 -0
  193. package/containers/Sms/Create/actions.js +27 -0
  194. package/containers/Sms/Create/constants.js +16 -0
  195. package/containers/Sms/Create/index.js +1488 -0
  196. package/containers/Sms/Create/messages.js +109 -0
  197. package/containers/Sms/Create/reducer.js +41 -0
  198. package/containers/Sms/Create/sagas.js +40 -0
  199. package/containers/Sms/Create/selectors.js +28 -0
  200. package/containers/Sms/Create/test/saga.test.js +11 -0
  201. package/containers/Sms/Edit/actions.js +40 -0
  202. package/containers/Sms/Edit/constants.js +17 -0
  203. package/containers/Sms/Edit/index.js +1472 -0
  204. package/containers/Sms/Edit/messages.js +105 -0
  205. package/containers/Sms/Edit/reducer.js +50 -0
  206. package/containers/Sms/Edit/sagas.js +60 -0
  207. package/containers/Sms/Edit/selectors.js +32 -0
  208. package/containers/Sms/Edit/test/saga.test.js +13 -0
  209. package/containers/TagList/_tagList.scss +8 -0
  210. package/containers/TagList/actions.js +15 -0
  211. package/containers/TagList/constants.js +32 -0
  212. package/containers/TagList/index.js +236 -0
  213. package/containers/TagList/messages.js +13 -0
  214. package/containers/TagList/reducer.js +23 -0
  215. package/containers/TagList/sagas.js +11 -0
  216. package/containers/TagList/selectors.js +25 -0
  217. package/containers/Templates/_templates.scss +333 -0
  218. package/containers/Templates/actions.js +103 -0
  219. package/containers/Templates/constants.js +60 -0
  220. package/containers/Templates/index.js +1756 -0
  221. package/containers/Templates/messages.js +337 -0
  222. package/containers/Templates/reducer.js +142 -0
  223. package/containers/Templates/sagas.js +163 -0
  224. package/containers/Templates/selectors.js +28 -0
  225. package/containers/Templates/test/saga.test.js +241 -0
  226. package/containers/WeChat/MapTemplates/_mapTemplates.scss +8 -0
  227. package/containers/WeChat/MapTemplates/actions.js +52 -0
  228. package/containers/WeChat/MapTemplates/constants.js +28 -0
  229. package/containers/WeChat/MapTemplates/index.js +1610 -0
  230. package/containers/WeChat/MapTemplates/messages.js +157 -0
  231. package/containers/WeChat/MapTemplates/reducer.js +74 -0
  232. package/containers/WeChat/MapTemplates/sagas.js +84 -0
  233. package/containers/WeChat/MapTemplates/selectors.js +25 -0
  234. package/containers/WeChat/MapTemplates/test/saga.test.js +155 -0
  235. package/containers/WeChat/RichmediaTemplates/Create/_createRichmedia.scss +57 -0
  236. package/containers/WeChat/RichmediaTemplates/Create/actions.js +36 -0
  237. package/containers/WeChat/RichmediaTemplates/Create/constants.js +15 -0
  238. package/containers/WeChat/RichmediaTemplates/Create/index.js +1071 -0
  239. package/containers/WeChat/RichmediaTemplates/Create/messages.js +165 -0
  240. package/containers/WeChat/RichmediaTemplates/Create/reducer.js +60 -0
  241. package/containers/WeChat/RichmediaTemplates/Create/richmediaschema.js +497 -0
  242. package/containers/WeChat/RichmediaTemplates/Create/sagas.js +51 -0
  243. package/containers/WeChat/RichmediaTemplates/Create/selectors.js +37 -0
  244. package/containers/WeChat/RichmediaTemplates/Create/test/saga.test.js +13 -0
  245. package/containers/WeChat/RichmediaTemplates/Edit/actions.js +20 -0
  246. package/containers/WeChat/RichmediaTemplates/Edit/constants.js +10 -0
  247. package/containers/WeChat/RichmediaTemplates/Edit/index.js +136 -0
  248. package/containers/WeChat/RichmediaTemplates/Edit/messages.js +13 -0
  249. package/containers/WeChat/RichmediaTemplates/Edit/reducer.js +28 -0
  250. package/containers/WeChat/RichmediaTemplates/Edit/sagas.js +36 -0
  251. package/containers/WeChat/RichmediaTemplates/Edit/selectors.js +30 -0
  252. package/containers/WeChat/RichmediaTemplates/Edit/test/saga.test.js +12 -0
  253. package/containers/WeChat/RichmediaTemplates/View/actions.js +15 -0
  254. package/containers/WeChat/RichmediaTemplates/View/constants.js +7 -0
  255. package/containers/WeChat/RichmediaTemplates/View/index.js +47 -0
  256. package/containers/WeChat/RichmediaTemplates/View/messages.js +21 -0
  257. package/containers/WeChat/RichmediaTemplates/View/reducer.js +23 -0
  258. package/containers/WeChat/RichmediaTemplates/View/sagas.js +11 -0
  259. package/containers/WeChat/RichmediaTemplates/View/selectors.js +25 -0
  260. package/index.js +2 -4
  261. package/package.json +1 -1
  262. package/routes.js +202 -136
  263. package/services/getSchema.js +1 -1
  264. package/services/localStorageApi.js +0 -1
  265. package/tests/i18n.test.js +1 -1
  266. package/utils/asyncInjectors.js +78 -0
  267. package/utils/authWrapper.js +1 -1
  268. package/utils/callNativeEvent.js +16 -0
  269. package/utils/checkStore.js +21 -0
  270. package/utils/common.js +2 -2
  271. package/utils/customAuthWrapper.js +62 -0
  272. package/utils/customConnectedAuthWrapper.js +26 -0
  273. package/utils/tagValidations.js +1 -1
  274. package/utils/tests/authWrapper.test.js +1 -1
  275. package/utils/tests/checkStore.test.js +1 -1
  276. package/utils/tests/customAuth.test.js +1 -1
  277. package/utils/transformerUtils.js +1 -1
  278. package/v2Components/CapTagList/index.js +14 -9
  279. package/v2Components/Carousel/style.scss +1 -1
  280. package/v2Components/EmailMobilePreview/index.js +2 -2
  281. package/v2Components/FormBuilder/index.js +2 -2
  282. package/v2Components/NavigationBar/tests/saga.test.js +31 -36
  283. package/v2Components/TemplatePreview/index.js +1 -2
  284. package/v2Containers/Cap/tests/saga.test.js +1 -1
  285. package/v2Containers/Email/index.js +1 -1
  286. package/v2Containers/FTP/index.js +1 -1
  287. package/v2Containers/Line/Container/Text/index.js +1 -1
  288. package/v2Containers/Sms/Create/index.js +1 -1
  289. package/v2Containers/Sms/Edit/index.js +1 -1
  290. package/v2Containers/TagList/index.js +1 -1
  291. package/v2Containers/TagList/utils.js +1 -1
  292. package/v2Containers/Templates/index.js +1 -1
  293. package/v2Containers/Templates/sagas.js +1 -1
  294. package/constants/unified.js +0 -189
@@ -0,0 +1,157 @@
1
+ /*
2
+ * WeChat Messages
3
+ *
4
+ * This contains all the text for the WeChat component.
5
+ */
6
+ import { defineMessages } from 'react-intl';
7
+
8
+ export default defineMessages({
9
+ "header": {
10
+ id: 'creatives.containers.WeChat.header',
11
+ defaultMessage: 'WeChat',
12
+ },
13
+ 'Template mapping': {
14
+ id: 'creatives.containers.WeChat.templateMapping',
15
+ defaultMessage: 'Template mapping',
16
+ },
17
+ 'Discard': {
18
+ id: 'creatives.containers.WeChat.discard',
19
+ defaultMessage: 'Discard',
20
+ },
21
+ 'Cancel': {
22
+ id: 'creatives.containers.WeChat.cancel',
23
+ defaultMessage: 'Cancel',
24
+ },
25
+ 'Save': {
26
+ id: 'creatives.containers.WeChat.save',
27
+ defaultMessage: 'Save',
28
+ },
29
+ 'Account Id': {
30
+ id: 'creatives.containers.WeChat.accountId',
31
+ defaultMessage: 'Account id',
32
+ },
33
+ 'Select Wechat Account': {
34
+ id: 'creatives.containers.WeChat.selectWechatAccount',
35
+ defaultMessage: 'Select wechat account',
36
+ },
37
+ 'Template': {
38
+ id: 'creatives.containers.WeChat.template',
39
+ defaultMessage: 'Template',
40
+ },
41
+ 'Select Wechat Template': {
42
+ id: 'creatives.containers.WeChat.selectWechatTemplate',
43
+ defaultMessage: 'Select wechat template',
44
+ },
45
+ 'Link': {
46
+ id: 'creatives.containers.WeChat.link',
47
+ defaultMessage: 'Link',
48
+ },
49
+ 'isInternalUrl': {
50
+ id: 'creatives.containers.WeChat.isInternalUrl',
51
+ defaultMessage: 'Is this internal url',
52
+ },
53
+ "Tags": {
54
+ id: 'creatives.containers.WeChat.tagsLabel',
55
+ defaultMessage: "Tags",
56
+ },
57
+ "gettingTemplateData": {
58
+ id: 'creatives.containers.WeChat.gettingTemplateData',
59
+ defaultMessage: "Getting template data..",
60
+ },
61
+ "wechatEditSuccess": {
62
+ id: 'creatives.containers.WeChat.wechatEditSuccess',
63
+ defaultMessage: "WeChat template edited successfully",
64
+ },
65
+ "wechatCreateSuccess": {
66
+ id: 'creatives.containers.WeChat.wechatCreateSuccess',
67
+ defaultMessage: "WeChat template mapped successfully",
68
+ },
69
+ "somethingWentWrong": {
70
+ id: 'creatives.containers.WeChat.somethingWentWrong',
71
+ defaultMessage: "Something went wrong!!",
72
+ },
73
+ "goBackConfirmation": {
74
+ id: 'creatives.containers.WeChat.goBackConfirmation',
75
+ defaultMessage: "Going back will discard all the changes you've made. Continue?",
76
+ },
77
+ "alertMessage": {
78
+ id: 'creatives.containers.WeChat.alertMessage',
79
+ defaultMessage: "Alert",
80
+ },
81
+ "goBackTemporaryConfirmation": {
82
+ id: 'creatives.containers.WeChat.goBackTemporaryConfirmation',
83
+ defaultMessage: "Do you really want to go back? All your temporary changes will be lost!",
84
+ },
85
+ "mapTemplateHeader": {
86
+ id: 'creatives.containers.WeChat.mapTemplateHeader',
87
+ defaultMessage: "Header",
88
+ },
89
+ "mapTemplateFooter": {
90
+ id: 'creatives.containers.WeChat.mapTemplateFooter',
91
+ defaultMessage: "Footer",
92
+ },
93
+ "invalidContent": {
94
+ id: 'creatives.containers.WeChat.invalidContent',
95
+ defaultMessage: "has invalid content.",
96
+ },
97
+ "link": {
98
+ id: 'creatives.containers.WeChat.link',
99
+ defaultMessage: "Link",
100
+ },
101
+ "linkCantEmpty": {
102
+ id: 'creatives.containers.WeChat.linkCantEmpty',
103
+ defaultMessage: "Link cannot be empty",
104
+ },
105
+ "loadingEDMTemplates": {
106
+ id: 'creatives.containers.WeChat.loadingEDMTemplates',
107
+ defaultMessage: "loading EDM Templates",
108
+ },
109
+ "redirectOptionsHeadingValue": {
110
+ id: 'creatives.containers.WeChat.redirectOptionsHeadingValue',
111
+ defaultMessage: 'URL or Mini-Program',
112
+ },
113
+ "redirectOptionURL": {
114
+ id: 'creatives.containers.WeChat.redirectOptionURL',
115
+ defaultMessage: 'URL',
116
+ },
117
+ "redirectOptionMiniProgram": {
118
+ id: 'creatives.containers.WeChat.redirectOptionMiniProgram',
119
+ defaultMessage: 'Mini-Program',
120
+ },
121
+ "redirectionOptionError": {
122
+ id: 'creatives.containers.WeChat.redirectionOptionError',
123
+ defaultMessage: 'Please select a redirect option',
124
+ },
125
+ "miniWechatIdLabel": {
126
+ id: 'creatives.containers.WeChat.miniWechatIdLabel',
127
+ defaultMessage: 'Mini-Program ID',
128
+ },
129
+ "miniWeChatPlaceholder": {
130
+ id: 'creatives.containers.WeChat.miniWeChatPlaceholder',
131
+ defaultMessage: 'E.g. ab4892njkl4l2op',
132
+ },
133
+ "miniWechatIdInductive": {
134
+ id: 'creatives.containers.WeChat.miniWechatIdInductive',
135
+ defaultMessage: 'Unique alpha numeric code for this specific app',
136
+ },
137
+ "miniWechatIdError": {
138
+ id: 'creatives.containers.WeChat.miniWechatIdError',
139
+ defaultMessage: 'Mini-Program ID cannot be empty',
140
+ },
141
+ "pagePathLabel": {
142
+ id: 'creatives.containers.WeChat.pagePathLabel',
143
+ defaultMessage: 'Page path',
144
+ },
145
+ "pagePathError": {
146
+ id: 'creatives.containers.WeChat.pagePathError',
147
+ defaultMessage: 'Page path cannot be empty.',
148
+ },
149
+ "pagePathPlaceholder": {
150
+ id: 'creatives.containers.WeChat.pagePathPlaceholder',
151
+ defaultMessage: 'E.g. pages/user/profile',
152
+ },
153
+ "pagePathInductive": {
154
+ id: 'creatives.containers.WeChat.pagePathInductive',
155
+ defaultMessage: 'User will be redirected to the Mini-Program path provided here',
156
+ },
157
+ });
@@ -0,0 +1,74 @@
1
+ /*
2
+ *
3
+ * WeChat reducer
4
+ *
5
+ */
6
+
7
+ import { fromJS } from 'immutable';
8
+ import * as types from './constants';
9
+
10
+ const initialState = fromJS({
11
+ weChatDefaultTemplate: fromJS({}),
12
+ fetchingDefaultTemplates: false,
13
+ errorFetchingDefaultTempalte: false,
14
+ });
15
+
16
+ function weChatReducer(state = initialState, action) {
17
+ switch (action.type) {
18
+ case types.GET_WECHAT_DEFAULT_TEMPLATES_REQUEST:
19
+ return state
20
+ .set('fetchingDefaultTemplates', true)
21
+ .set('weChatDefaultTemplate', fromJS({}))
22
+ .set('weChatTemplates', fromJS({}))
23
+ .set('errorFetchingDefaultTempalte', false);
24
+ case types.GET_WECHAT_DEFAULT_TEMPLATES_SUCCESS:
25
+ return state
26
+ .set('fetchingDefaultTemplates', false)
27
+ .set('weChatDefaultTemplate', fromJS(action.data))
28
+ .set('weChatTemplates', fromJS(action.templateData));
29
+ case types.GET_WECHAT_DEFAULT_TEMPLATES_FAILURE:
30
+ return state
31
+ .set('fetchingDefaultTemplates', false)
32
+ .set('errorFetchingDefaultTempalte', true);
33
+ case types.CREATE_TEMPLATE_REQUEST:
34
+ return state
35
+ .set('createTemplateInProgress', true)
36
+ .set('createTemplateError', false);
37
+ case types.CREATE_TEMPLATE_SUCCESS:
38
+ return state.set('createTemplateInProgress', false)
39
+ .set('createResponse', action.data)
40
+ .set('createTemplateError', (action.statusCode !== undefined && action.statusCode > 300));
41
+ case types.CREATE_TEMPLATE_FAILURE:
42
+ return state
43
+ .set('createTemplateInProgress', false)
44
+ .set('createTemplateError', true);
45
+ case types.CLEAR_CREATE_RESPONSE_REQUEST:
46
+ return state.set('createResponse', {});
47
+ case types.GET_WECRM_ACCOUNTS_REQUEST:
48
+ return state
49
+ .set('fetchingWeCrmAccounts', true)
50
+ .set('weCrmAccountFetchingError', false);
51
+ case types.GET_WECRM_ACCOUNTS_SUCCESS:
52
+ return state
53
+ .set('fetchingWeCrmAccounts', false)
54
+ .set('weCrmAccounts', fromJS(action.data));
55
+ case types.GET_WECRM_ACCOUNTS_FAILURE:
56
+ return state
57
+ .set('fetchingWeCrmAccounts', false)
58
+ .set('weCrmAccountFetchingError', true);
59
+ case types.GET_TEMPLATE_DETAILS_REQUEST:
60
+ return state.set('getTemplateDetailsInProgress', true);
61
+ case types.GET_TEMPLATE_DETAILS_SUCCESS:
62
+ return state.set('getTemplateDetailsInProgress', false)
63
+ .set('templateDetails', action.data);
64
+ case types.GET_TEMPLATE_DETAILS_FAILURE:
65
+ return state.set('getTemplateDetailsInProgress', false);
66
+ case types.SET_WECHAT_ACCOUNT:
67
+ return state
68
+ .set('selectedWeChatAccount', fromJS(action.weChatAccount));
69
+ default:
70
+ return state;
71
+ }
72
+ }
73
+
74
+ export default weChatReducer;
@@ -0,0 +1,84 @@
1
+ import {
2
+ call, put, takeLatest, all,
3
+ } from 'redux-saga/effects';
4
+ import * as Api from '../../../services/api';
5
+ import * as types from './constants';
6
+
7
+ export function* getDefaultWeChatTemplates(params) {
8
+ try {
9
+
10
+ const result = yield call(Api.getAllTemplates, { channel: params.channel, queryParams: params.queryParams });
11
+ yield put({ type: types.GET_WECHAT_DEFAULT_TEMPLATES_SUCCESS, data: result.response.unMapped, templateData: result.response.mapped });
12
+ } catch (error) {
13
+ yield put({ type: types.GET_WECHAT_DEFAULT_TEMPLATES_FAILURE, error });
14
+ }
15
+ }
16
+
17
+ export function* createTemplate(template) {
18
+ try {
19
+ const result = yield call(Api.createWeChatTemplate, template);
20
+ // const sidebar = result.response.sidebar;
21
+ yield put({ type: types.CREATE_TEMPLATE_SUCCESS, data: result.response, statusCode: result.status ? result.status.code : '' });
22
+ } catch (error) {
23
+ yield put({ type: types.CREATE_TEMPLATE_FAILURE, error });
24
+ }
25
+ }
26
+
27
+ export function* fetchWeCrmAccounts() {
28
+ try {
29
+ const result = yield call(Api.fetchWeCrmAccounts);
30
+ yield put({
31
+ type: types.GET_WECRM_ACCOUNTS_SUCCESS,
32
+ data: result.response,
33
+ });
34
+ } catch (error) {
35
+ yield put({
36
+ type: types.GET_WECRM_ACCOUNTS_FAILURE,
37
+ data: error,
38
+ });
39
+ }
40
+ }
41
+
42
+ export function* getTemplateDetails(id) {
43
+ try {
44
+
45
+ const result = yield call(Api.getTemplateDetails, id);
46
+ // const sidebar = result.response.sidebar;
47
+ yield put({ type: types.GET_TEMPLATE_DETAILS_SUCCESS, data: result.response });
48
+ } catch (error) {
49
+ yield put({ type: types.GET_TEMPLATE_DETAILS_FAILURE, error });
50
+ }
51
+ }
52
+
53
+ function* watchGetDefaultWechatTemplates() {
54
+ yield takeLatest(types.GET_WECHAT_DEFAULT_TEMPLATES_REQUEST, getDefaultWeChatTemplates);
55
+ }
56
+
57
+ function* watchCreateTemplate() {
58
+ yield takeLatest(types.CREATE_TEMPLATE_REQUEST, createTemplate);
59
+ }
60
+
61
+ function* watchFetchWeCrmAccounts() {
62
+ yield takeLatest(types.GET_WECRM_ACCOUNTS_REQUEST, fetchWeCrmAccounts);
63
+ }
64
+
65
+ function* watchGetTemplateDetails() {
66
+ yield takeLatest(types.GET_TEMPLATE_DETAILS_REQUEST, getTemplateDetails);
67
+ }
68
+
69
+ // All sagas to be loaded
70
+ export default [
71
+ watchGetDefaultWechatTemplates,
72
+ watchCreateTemplate,
73
+ watchFetchWeCrmAccounts,
74
+ watchGetTemplateDetails,
75
+ ];
76
+
77
+ export function* mapTemplatesSaga() {
78
+ yield all([
79
+ watchGetDefaultWechatTemplates(),
80
+ watchCreateTemplate(),
81
+ watchFetchWeCrmAccounts(),
82
+ watchGetTemplateDetails(),
83
+ ]);
84
+ }
@@ -0,0 +1,25 @@
1
+ import { createSelector } from 'reselect';
2
+
3
+ /**
4
+ * Direct selector to the weChat state domain
5
+ */
6
+ const selectWeChatDomain = () => (state) => state.get('weChat');
7
+
8
+ /**
9
+ * Other specific selectors
10
+ */
11
+
12
+
13
+ /**
14
+ * Default selector used by WeChat
15
+ */
16
+
17
+ const makeSelectWeChat = () => createSelector(
18
+ selectWeChatDomain(),
19
+ (substate) => substate.toJS()
20
+ );
21
+
22
+ export default makeSelectWeChat;
23
+ export {
24
+ selectWeChatDomain,
25
+ };
@@ -0,0 +1,155 @@
1
+ import { expectSaga } from 'redux-saga-test-plan';
2
+ import { call, put } from 'redux-saga/effects';
3
+ import { throwError } from 'redux-saga-test-plan/providers';
4
+ import * as Api from '../../../../services/api';
5
+ import * as types from '../constants';
6
+ import * as sagas from '../sagas';
7
+ import { mapTemplatesSaga } from '../sagas';
8
+
9
+ describe('WeChat Template Management Sagas', () => {
10
+ describe('getDefaultWeChatTemplates Saga', () => {
11
+ const params = { channel: 'WeChat', queryParams: { type: 'default' } };
12
+
13
+ it.concurrent('handles fetching default WeChat templates successfully', () => {
14
+ const fakeResponse = {
15
+ response: {
16
+ unMapped: [{ id: 1, name: 'Template One' }],
17
+ mapped: [{ id: 2, name: 'Mapped Template' }]
18
+ }
19
+ };
20
+
21
+ return expectSaga(sagas.getDefaultWeChatTemplates, params)
22
+ .provide([
23
+ [call(Api.getAllTemplates, { channel: params.channel, queryParams: params.queryParams }), fakeResponse]
24
+ ])
25
+ .put({
26
+ type: types.GET_WECHAT_DEFAULT_TEMPLATES_SUCCESS,
27
+ data: fakeResponse.response.unMapped,
28
+ templateData: fakeResponse.response.mapped
29
+ })
30
+ .run();
31
+ });
32
+
33
+ it.concurrent('handles failure in fetching default WeChat templates', () => {
34
+ const error = new Error('Fetch failed');
35
+
36
+ return expectSaga(sagas.getDefaultWeChatTemplates, params)
37
+ .provide([
38
+ [call(Api.getAllTemplates, { channel: params.channel, queryParams: params.queryParams }), throwError(error)]
39
+ ])
40
+ .put({
41
+ type: types.GET_WECHAT_DEFAULT_TEMPLATES_FAILURE,
42
+ error
43
+ })
44
+ .run();
45
+ });
46
+ });
47
+
48
+ describe('createTemplate Saga', () => {
49
+ const template = { name: 'New WeChat Template' };
50
+ test.concurrent('handles creating a WeChat template successfully', () => {
51
+ const fakeResponse = {
52
+ response: template,
53
+ status: { code: 200 }
54
+ };
55
+ return expectSaga(sagas.createTemplate, template)
56
+ .provide([
57
+ [call(Api.createWeChatTemplate, template), fakeResponse]
58
+ ])
59
+ .put({
60
+ type: types.CREATE_TEMPLATE_SUCCESS,
61
+ data: fakeResponse.response,
62
+ statusCode: 200
63
+ })
64
+ .run();
65
+ });
66
+ test.concurrent('handles failure when creating a WeChat template', () => {
67
+ const error = new Error('Creation failed');
68
+ return expectSaga(sagas.createTemplate, template)
69
+ .provide([
70
+ [call(Api.createWeChatTemplate, template), throwError(error)]
71
+ ])
72
+ .put({
73
+ type: types.CREATE_TEMPLATE_FAILURE,
74
+ error
75
+ })
76
+ .run();
77
+ });
78
+ });
79
+
80
+ describe('fetchWeCrmAccounts Saga', () => {
81
+ it.concurrent('handles fetching WeCrm accounts successfully', () => {
82
+ const fakeResponse = {
83
+ response: [{ id: 1, name: 'Account One' }]
84
+ };
85
+
86
+ return expectSaga(sagas.fetchWeCrmAccounts)
87
+ .provide([
88
+ [call(Api.fetchWeCrmAccounts), fakeResponse]
89
+ ])
90
+ .put({
91
+ type: types.GET_WECRM_ACCOUNTS_SUCCESS,
92
+ data: fakeResponse.response
93
+ })
94
+ .run();
95
+ });
96
+
97
+ it.concurrent('handles failure in fetching WeCrm accounts', () => {
98
+ const error = new Error('Fetch failed');
99
+
100
+ return expectSaga(sagas.fetchWeCrmAccounts)
101
+ .provide([
102
+ [call(Api.fetchWeCrmAccounts), throwError(error)]
103
+ ])
104
+ .put({
105
+ type: types.GET_WECRM_ACCOUNTS_FAILURE,
106
+ data: error
107
+ })
108
+ .run();
109
+ });
110
+ });
111
+
112
+ describe('getTemplateDetails Saga', () => {
113
+ const id = '123';
114
+
115
+ it.concurrent('handles fetching template details successfully', () => {
116
+ const fakeResponse = {
117
+ response: { id: 123, name: 'Detailed Template' }
118
+ };
119
+
120
+ return expectSaga(sagas.getTemplateDetails, id)
121
+ .provide([
122
+ [call(Api.getTemplateDetails, id), fakeResponse]
123
+ ])
124
+ .put({
125
+ type: types.GET_TEMPLATE_DETAILS_SUCCESS,
126
+ data: fakeResponse.response
127
+ })
128
+ .run();
129
+ });
130
+
131
+ it.concurrent('handles failure in fetching template details', () => {
132
+ const error = new Error('Fetch failed');
133
+
134
+ return expectSaga(sagas.getTemplateDetails, id)
135
+ .provide([
136
+ [call(Api.getTemplateDetails, id), throwError(error)]
137
+ ])
138
+ .put({
139
+ type: types.GET_TEMPLATE_DETAILS_FAILURE,
140
+ error
141
+ })
142
+ .run();
143
+ });
144
+ });
145
+
146
+
147
+
148
+ // Test combined saga
149
+ describe('Combined mapTemplatesSaga', () => {
150
+ it.concurrent('should initialize all WeChat-related watcher sagas without error', () => {
151
+ return expectSaga(mapTemplatesSaga)
152
+ .run();
153
+ });
154
+ });
155
+ });
@@ -0,0 +1,57 @@
1
+ .hover-container {
2
+ position: relative;
3
+ }
4
+ .richmedia-icons {
5
+ display: none;
6
+ position: absolute;
7
+ top: 50%;
8
+ }
9
+ .hover-container:hover {
10
+ .richmedia-card {
11
+ opacity: 0.2;
12
+ border: 2px solid #1D5B96!important;
13
+ }
14
+ .richmedia-card-rectangle {
15
+ opacity: 0.2;
16
+ border: 2px solid #1D5B96!important;
17
+ }
18
+ .richmedia-icons {
19
+ opacity: 1 !important;
20
+ display: inline-flex!important;
21
+ }
22
+
23
+ }
24
+ .richmedia-card-clicked {
25
+ border: 2px solid #1D5B96!important;
26
+ }
27
+ .richmedia-card-rectangle-clicked {
28
+ border: 2px solid #1D5B96!important;
29
+ }
30
+ .hover-container .richmedia-card, .hover-container .richmedia-card-rectangle {
31
+ border: 1px solid #707070;
32
+ }
33
+ .hover-icons {
34
+ font-size: 20px;
35
+ }
36
+ .richmedia-container {
37
+ height: 100%;
38
+ overflow-y: auto;
39
+ }
40
+ .template-form-header {
41
+ margin-bottom: 2.5rem;
42
+ }
43
+ .wechat-form-container {
44
+ margin-right: 2.5rem;
45
+ }
46
+ .wechat-richmedia-row {
47
+ margin-bottom: 1.5rem;
48
+ width: 50rem;
49
+ }
50
+ .overflow-wrap-fields {
51
+ text-overflow: ellipsis;
52
+ overflow: hidden;
53
+ overflow-wrap: break-word;
54
+ display: -webkit-box !important;
55
+ -webkit-box-orient: vertical;
56
+ -webkit-line-clamp: 2;
57
+ }
@@ -0,0 +1,36 @@
1
+ /*
2
+ *
3
+ * Create actions
4
+ *
5
+ */
6
+ import * as types from './constants';
7
+
8
+ export function defaultAction() {
9
+ return {
10
+ type: types.DEFAULT_ACTION,
11
+ };
12
+ }
13
+ export function uploadAsset(file, assetType, fileParams, mode, wechatParams, contentId, uploadId) {
14
+ return {
15
+ type: types.UPLOAD_ASSET_REQUEST,
16
+ file,
17
+ assetType,
18
+ fileParams,
19
+ mode,
20
+ wechatParams,
21
+ contentId,
22
+ uploadId,
23
+ };
24
+ }
25
+ export function saveTemplate(template) {
26
+ return {
27
+ type: types.SAVE_TEMPLATE_REQUEST,
28
+ template,
29
+ };
30
+ }
31
+ export function clearContentImageStore() {
32
+ return {
33
+ type: types.CLEAR_CONTENT_ASSET,
34
+ };
35
+ }
36
+
@@ -0,0 +1,15 @@
1
+ /*
2
+ *
3
+ * Create constants
4
+ *
5
+ */
6
+
7
+ export const DEFAULT_ACTION = 'app/containers/Wechat/RichmediaTemplates/Create/DEFAULT_ACTION';
8
+ export const UPLOAD_ASSET_REQUEST = 'app/containers/Wechat/RichmediaTemplates/Create/UPLOAD_ASSET_REQUEST';
9
+ export const UPLOAD_ASSET_SUCCESS = 'app/containers/Wechat/RichmediaTemplates/Create/UPLOAD_ASSET_SUCCESS';
10
+ export const UPLOAD_ASSET_FAILURE = 'app/containers/Wechat/RichmediaTemplates/Create/UPLOAD_ASSET_FAILURE';
11
+ export const CLEAR_ASSET = 'app/containers/Wechat/RichmediaTemplates/Create/CLEAR_ASSET';
12
+ export const SAVE_TEMPLATE_REQUEST = 'app/containers/Wechat/RichmediaTemplates/Create/SAVE_TEMPLATE_REQUEST';
13
+ export const SAVE_TEMPLATE_SUCCESS = 'app/containers/Wechat/RichmediaTemplates/Create/SAVE_TEMPLATE_SUCCESS';
14
+ export const SAVE_TEMPLATE_FAILURE = 'app/containers/Wechat/RichmediaTemplates/Create/SAVE_TEMPLATE_FAILURE';
15
+ export const CLEAR_CONTENT_ASSET = 'app/containers/Wechat/RichmediaTemplates/Create/CLEAR_CONTENT_ASSET';