@capillarytech/creatives-library 8.0.136 → 8.0.137-alpha.1

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 (298) hide show
  1. package/constants/unified.js +189 -0
  2. package/package.json +1 -1
  3. package/services/getSchema.js +1 -1
  4. package/services/localStorageApi.js +1 -0
  5. package/tests/i18n.test.js +1 -1
  6. package/utils/common.js +2 -2
  7. package/utils/createMobilePushPayload.js +0 -1
  8. package/utils/tagValidations.js +1 -1
  9. package/utils/tests/checkStore.test.js +1 -1
  10. package/utils/tests/customAuth.test.js +1 -1
  11. package/utils/transformerUtils.js +1 -1
  12. package/v2Components/CapTagList/index.js +9 -14
  13. package/v2Components/Carousel/style.scss +1 -1
  14. package/v2Components/EmailMobilePreview/index.js +2 -2
  15. package/v2Components/FormBuilder/index.js +2 -2
  16. package/v2Components/TemplatePreview/_templatePreview.scss +0 -10
  17. package/v2Components/TemplatePreview/index.js +2 -3
  18. package/v2Containers/Cap/tests/saga.test.js +1 -1
  19. package/v2Containers/Email/index.js +1 -1
  20. package/v2Containers/FTP/index.js +1 -1
  21. package/v2Containers/Line/Container/Text/index.js +1 -1
  22. package/v2Containers/Line/Container/_lineCreate.scss +2 -4
  23. package/v2Containers/MobilePushNew/components/MediaUploaders.js +0 -1
  24. package/v2Containers/MobilePushNew/components/tests/MediaUploaders.test.js +271 -0
  25. package/v2Containers/MobilePushNew/components/tests/PlatformContentFields.test.js +189 -0
  26. package/v2Containers/MobilePushNew/index.scss +9 -16
  27. package/v2Containers/Sms/Create/index.js +2 -2
  28. package/v2Containers/Sms/Edit/index.js +1 -1
  29. package/v2Containers/TagList/index.js +1 -1
  30. package/v2Containers/TagList/utils.js +1 -1
  31. package/v2Containers/Templates/index.js +3 -3
  32. package/v2Containers/Templates/sagas.js +1 -1
  33. package/components/BreadCrumbs/index.js +0 -65
  34. package/components/BreadCrumbs/messages.js +0 -13
  35. package/components/CapTagList/index.js +0 -235
  36. package/components/CapTagList/messages.js +0 -45
  37. package/components/Card/_customCard.scss +0 -40
  38. package/components/Card/index.js +0 -78
  39. package/components/Card/tests/__snapshots__/index.test.js.snap +0 -22
  40. package/components/Card/tests/index.test.js +0 -20
  41. package/components/CardGrid/index.js +0 -71
  42. package/components/Ckeditor/index.js +0 -238
  43. package/components/Ckeditor/messages.js +0 -13
  44. package/components/Ckeditor/style.scss +0 -3
  45. package/components/Component/index.js +0 -29
  46. package/components/CustomPopOver/index.js +0 -81
  47. package/components/CustomPopOver/messages.js +0 -17
  48. package/components/DateFilter/index.js +0 -349
  49. package/components/DateFilter/messages.js +0 -57
  50. package/components/DateRange/index.js +0 -114
  51. package/components/DateRange/messages.js +0 -25
  52. package/components/Edmeditor/index.js +0 -65
  53. package/components/Edmeditor/messages.js +0 -13
  54. package/components/EmailPreview/_emailPreview.scss +0 -119
  55. package/components/EmailPreview/assets/images/iPad.svg +0 -10
  56. package/components/EmailPreview/assets/images/mobile.png +0 -0
  57. package/components/EmailPreview/index.js +0 -107
  58. package/components/EmailPreview/messages.js +0 -33
  59. package/components/Footer/index.js +0 -27
  60. package/components/Footer/messages.js +0 -13
  61. package/components/FormBuilder/_formBuilder.scss +0 -83
  62. package/components/FormBuilder/index.js +0 -3279
  63. package/components/FormBuilder/messages.js +0 -61
  64. package/components/Header/index.js +0 -44
  65. package/components/Header/messages.js +0 -29
  66. package/components/ImagePreview/_imagePreview.scss +0 -63
  67. package/components/ImagePreview/index.js +0 -52
  68. package/components/ImagePreview/messages.js +0 -17
  69. package/components/PageHeader/_pageHeader.scss +0 -22
  70. package/components/PageHeader/index.js +0 -37
  71. package/components/PageHeader/messages.js +0 -13
  72. package/components/Pagination/_pagination.scss +0 -5
  73. package/components/Pagination/index.js +0 -49
  74. package/components/PreviewSideBar/_previewsidebar.scss +0 -28
  75. package/components/PreviewSideBar/index.js +0 -152
  76. package/components/PreviewSideBar/messages.js +0 -41
  77. package/components/Sidebar/_sidebar.scss +0 -115
  78. package/components/Sidebar/index.js +0 -214
  79. package/components/Sidebar/messages.js +0 -21
  80. package/components/SlideBox/_slideBox.scss +0 -63
  81. package/components/SlideBox/index.js +0 -47
  82. package/components/SlideBox/tests/index.test.js +0 -103
  83. package/components/SmsEditor/index.js +0 -55
  84. package/components/SmsTest/index.js +0 -117
  85. package/components/SmsTest/messages.js +0 -21
  86. package/components/TemplatePreview/WechatRichmediaTemplatePreview/_wechatRichmediaTemplatePrev.scss +0 -42
  87. package/components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +0 -141
  88. package/components/TemplatePreview/WechatRichmediaTemplatePreview/messages.js +0 -21
  89. package/components/TemplatePreview/_templatePreview.scss +0 -642
  90. package/components/TemplatePreview/assets/images/WECHAT_5x.png +0 -0
  91. package/components/TemplatePreview/assets/images/androidPushMessage.svg +0 -45
  92. package/components/TemplatePreview/assets/images/home-screen-android.svg +0 -21
  93. package/components/TemplatePreview/assets/images/home-screen-ios.svg +0 -16
  94. package/components/TemplatePreview/assets/images/iPhonePushMessage.svg +0 -135
  95. package/components/TemplatePreview/assets/images/mobile.svg +0 -24
  96. package/components/TemplatePreview/assets/images/sms-body.png +0 -0
  97. package/components/TemplatePreview/assets/images/sms-icon.png +0 -0
  98. package/components/TemplatePreview/assets/images/sms_mobile.png +0 -0
  99. package/components/TemplatePreview/assets/images/sms_mobile_android.svg +0 -22
  100. package/components/TemplatePreview/assets/images/sms_mobile_ios.svg +0 -16
  101. package/components/TemplatePreview/assets/images/user-icon.svg +0 -19
  102. package/components/TemplatePreview/assets/images/wechat-mobile.svg +0 -78
  103. package/components/TemplatePreview/assets/images/wechat_mobile_android.svg +0 -20
  104. package/components/TemplatePreview/index.js +0 -617
  105. package/components/TemplatePreview/messages.js +0 -78
  106. package/components/Toastr/index.js +0 -60
  107. package/components/Toastr/messages.js +0 -13
  108. package/components/ToastrMessage/index.js +0 -113
  109. package/components/ToastrMessage/messages.js +0 -17
  110. package/components/TopBar/_topbar.scss +0 -46
  111. package/components/TopBar/assets/images/capillary_logo.png +0 -0
  112. package/components/TopBar/assets/images/old_capillary_logo.png +0 -0
  113. package/components/TopBar/index.js +0 -113
  114. package/components/TopBar/messages.js +0 -29
  115. package/containers/App/actions.js +0 -7
  116. package/containers/App/constants.js +0 -114
  117. package/containers/App/index.js +0 -52
  118. package/containers/App/reducer.js +0 -19
  119. package/containers/App/sagas.js +0 -31
  120. package/containers/App/selectors.js +0 -25
  121. package/containers/App/test/saga.test.js +0 -11
  122. package/containers/Assets/Gallery/_gallery.scss +0 -126
  123. package/containers/Assets/Gallery/actions.js +0 -37
  124. package/containers/Assets/Gallery/constants.js +0 -23
  125. package/containers/Assets/Gallery/index.js +0 -473
  126. package/containers/Assets/Gallery/messages.js +0 -93
  127. package/containers/Assets/Gallery/reducer.js +0 -81
  128. package/containers/Assets/Gallery/sagas.js +0 -80
  129. package/containers/Assets/Gallery/selectors.js +0 -25
  130. package/containers/Assets/Gallery/tests/__snapshots__/reducer.test.js.snap +0 -9
  131. package/containers/Assets/Gallery/tests/actions.test.js +0 -25
  132. package/containers/Assets/Gallery/tests/reducer.test.js +0 -96
  133. package/containers/Assets/Gallery/tests/saga.test.js +0 -157
  134. package/containers/Cap/actions.js +0 -66
  135. package/containers/Cap/constants.js +0 -25
  136. package/containers/Cap/index.js +0 -402
  137. package/containers/Cap/messages.js +0 -75
  138. package/containers/Cap/reducer.js +0 -113
  139. package/containers/Cap/sagas.js +0 -159
  140. package/containers/Cap/selectors.js +0 -75
  141. package/containers/Cap/tests/__snapshots__/index.test.js.snap +0 -2269
  142. package/containers/Cap/tests/index.test.js +0 -22
  143. package/containers/Cap/tests/saga.test.js +0 -284
  144. package/containers/Dashboard/actions.js +0 -15
  145. package/containers/Dashboard/constants.js +0 -7
  146. package/containers/Dashboard/index.js +0 -76
  147. package/containers/Dashboard/messages.js +0 -13
  148. package/containers/Dashboard/reducer.js +0 -21
  149. package/containers/Dashboard/sagas.js +0 -17
  150. package/containers/Dashboard/selectors.js +0 -25
  151. package/containers/Dashboard/test/saga.test.js +0 -9
  152. package/containers/Ebill/_ebill.scss +0 -5
  153. package/containers/Ebill/actions.js +0 -43
  154. package/containers/Ebill/constants.js +0 -20
  155. package/containers/Ebill/index.js +0 -1278
  156. package/containers/Ebill/messages.js +0 -77
  157. package/containers/Ebill/reducer.js +0 -72
  158. package/containers/Ebill/sagas.js +0 -74
  159. package/containers/Ebill/selectors.js +0 -25
  160. package/containers/Ebill/test/saga.test.js +0 -11
  161. package/containers/Email/_email.scss +0 -141
  162. package/containers/Email/actions.js +0 -81
  163. package/containers/Email/constants.js +0 -36
  164. package/containers/Email/index.js +0 -3325
  165. package/containers/Email/messages.js +0 -289
  166. package/containers/Email/reducer.js +0 -142
  167. package/containers/Email/sagas.js +0 -135
  168. package/containers/Email/selectors.js +0 -31
  169. package/containers/Email/test/saga.test.js +0 -671
  170. package/containers/LanguageProvider/actions.js +0 -17
  171. package/containers/LanguageProvider/constants.js +0 -8
  172. package/containers/LanguageProvider/index.js +0 -80
  173. package/containers/LanguageProvider/reducer.js +0 -30
  174. package/containers/LanguageProvider/selectors.js +0 -20
  175. package/containers/LanguageProvider/tests/actions.test.js +0 -19
  176. package/containers/LanguageProvider/tests/index.test.js +0 -78
  177. package/containers/LanguageProvider/tests/reducer.test.js +0 -20
  178. package/containers/LanguageProvider/tests/selectors.test.js +0 -15
  179. package/containers/Line/Create/_lineCreate.scss +0 -54
  180. package/containers/Line/Create/actions.js +0 -90
  181. package/containers/Line/Create/constants.js +0 -39
  182. package/containers/Line/Create/index.js +0 -836
  183. package/containers/Line/Create/messages.js +0 -189
  184. package/containers/Line/Create/reducer.js +0 -99
  185. package/containers/Line/Create/sagas.js +0 -121
  186. package/containers/Line/Create/selectors.js +0 -36
  187. package/containers/Line/Create/tests/saga.test.js +0 -202
  188. package/containers/Line/Edit/_lineEdit.scss +0 -35
  189. package/containers/Line/Edit/actions.js +0 -79
  190. package/containers/Line/Edit/constants.js +0 -27
  191. package/containers/Line/Edit/index.js +0 -1050
  192. package/containers/Line/Edit/messages.js +0 -177
  193. package/containers/Line/Edit/reducer.js +0 -83
  194. package/containers/Line/Edit/sagas.js +0 -80
  195. package/containers/Line/Edit/selectors.js +0 -29
  196. package/containers/Line/Edit/test/saga.test.js +0 -160
  197. package/containers/Login/assets/images/capillary_logo.png +0 -0
  198. package/containers/Login/components/LoginForm/index.js +0 -62
  199. package/containers/Login/components/LoginForm/messages.js +0 -33
  200. package/containers/Login/index.js +0 -130
  201. package/containers/Login/messages.js +0 -25
  202. package/containers/Login/selectors.js +0 -25
  203. package/containers/MobilePush/Create/_mobilePushCreate.scss +0 -39
  204. package/containers/MobilePush/Create/actions.js +0 -46
  205. package/containers/MobilePush/Create/constants.js +0 -23
  206. package/containers/MobilePush/Create/index.js +0 -2303
  207. package/containers/MobilePush/Create/messages.js +0 -269
  208. package/containers/MobilePush/Create/reducer.js +0 -70
  209. package/containers/MobilePush/Create/sagas.js +0 -74
  210. package/containers/MobilePush/Create/selectors.js +0 -28
  211. package/containers/MobilePush/Create/test/saga.test.js +0 -19
  212. package/containers/MobilePush/Edit/_mobilePushCreate.scss +0 -39
  213. package/containers/MobilePush/Edit/actions.js +0 -91
  214. package/containers/MobilePush/Edit/constants.js +0 -35
  215. package/containers/MobilePush/Edit/index.js +0 -2601
  216. package/containers/MobilePush/Edit/messages.js +0 -266
  217. package/containers/MobilePush/Edit/reducer.js +0 -112
  218. package/containers/MobilePush/Edit/sagas.js +0 -126
  219. package/containers/MobilePush/Edit/selectors.js +0 -29
  220. package/containers/MobilePush/Edit/tests/saga.test.js +0 -255
  221. package/containers/NotFoundPage/index.js +0 -25
  222. package/containers/NotFoundPage/messages.js +0 -13
  223. package/containers/NotFoundPage/tests/index.test.js +0 -17
  224. package/containers/Sms/Create/_smsCreate.scss +0 -42
  225. package/containers/Sms/Create/actions.js +0 -27
  226. package/containers/Sms/Create/constants.js +0 -16
  227. package/containers/Sms/Create/index.js +0 -1488
  228. package/containers/Sms/Create/messages.js +0 -109
  229. package/containers/Sms/Create/reducer.js +0 -41
  230. package/containers/Sms/Create/sagas.js +0 -40
  231. package/containers/Sms/Create/selectors.js +0 -28
  232. package/containers/Sms/Create/test/saga.test.js +0 -11
  233. package/containers/Sms/Edit/actions.js +0 -40
  234. package/containers/Sms/Edit/constants.js +0 -17
  235. package/containers/Sms/Edit/index.js +0 -1472
  236. package/containers/Sms/Edit/messages.js +0 -105
  237. package/containers/Sms/Edit/reducer.js +0 -50
  238. package/containers/Sms/Edit/sagas.js +0 -60
  239. package/containers/Sms/Edit/selectors.js +0 -32
  240. package/containers/Sms/Edit/test/saga.test.js +0 -13
  241. package/containers/TagList/_tagList.scss +0 -8
  242. package/containers/TagList/actions.js +0 -15
  243. package/containers/TagList/constants.js +0 -32
  244. package/containers/TagList/index.js +0 -236
  245. package/containers/TagList/messages.js +0 -13
  246. package/containers/TagList/reducer.js +0 -23
  247. package/containers/TagList/sagas.js +0 -11
  248. package/containers/TagList/selectors.js +0 -25
  249. package/containers/Templates/_templates.scss +0 -333
  250. package/containers/Templates/actions.js +0 -103
  251. package/containers/Templates/constants.js +0 -60
  252. package/containers/Templates/index.js +0 -1756
  253. package/containers/Templates/messages.js +0 -337
  254. package/containers/Templates/reducer.js +0 -142
  255. package/containers/Templates/sagas.js +0 -163
  256. package/containers/Templates/selectors.js +0 -28
  257. package/containers/Templates/test/saga.test.js +0 -241
  258. package/containers/WeChat/MapTemplates/_mapTemplates.scss +0 -8
  259. package/containers/WeChat/MapTemplates/actions.js +0 -52
  260. package/containers/WeChat/MapTemplates/constants.js +0 -28
  261. package/containers/WeChat/MapTemplates/index.js +0 -1610
  262. package/containers/WeChat/MapTemplates/messages.js +0 -157
  263. package/containers/WeChat/MapTemplates/reducer.js +0 -74
  264. package/containers/WeChat/MapTemplates/sagas.js +0 -84
  265. package/containers/WeChat/MapTemplates/selectors.js +0 -25
  266. package/containers/WeChat/MapTemplates/test/saga.test.js +0 -155
  267. package/containers/WeChat/RichmediaTemplates/Create/_createRichmedia.scss +0 -57
  268. package/containers/WeChat/RichmediaTemplates/Create/actions.js +0 -36
  269. package/containers/WeChat/RichmediaTemplates/Create/constants.js +0 -15
  270. package/containers/WeChat/RichmediaTemplates/Create/index.js +0 -1071
  271. package/containers/WeChat/RichmediaTemplates/Create/messages.js +0 -165
  272. package/containers/WeChat/RichmediaTemplates/Create/reducer.js +0 -60
  273. package/containers/WeChat/RichmediaTemplates/Create/richmediaschema.js +0 -497
  274. package/containers/WeChat/RichmediaTemplates/Create/sagas.js +0 -51
  275. package/containers/WeChat/RichmediaTemplates/Create/selectors.js +0 -37
  276. package/containers/WeChat/RichmediaTemplates/Create/test/saga.test.js +0 -13
  277. package/containers/WeChat/RichmediaTemplates/Edit/actions.js +0 -20
  278. package/containers/WeChat/RichmediaTemplates/Edit/constants.js +0 -10
  279. package/containers/WeChat/RichmediaTemplates/Edit/index.js +0 -136
  280. package/containers/WeChat/RichmediaTemplates/Edit/messages.js +0 -13
  281. package/containers/WeChat/RichmediaTemplates/Edit/reducer.js +0 -28
  282. package/containers/WeChat/RichmediaTemplates/Edit/sagas.js +0 -36
  283. package/containers/WeChat/RichmediaTemplates/Edit/selectors.js +0 -30
  284. package/containers/WeChat/RichmediaTemplates/Edit/test/saga.test.js +0 -12
  285. package/containers/WeChat/RichmediaTemplates/View/actions.js +0 -15
  286. package/containers/WeChat/RichmediaTemplates/View/constants.js +0 -7
  287. package/containers/WeChat/RichmediaTemplates/View/index.js +0 -47
  288. package/containers/WeChat/RichmediaTemplates/View/messages.js +0 -21
  289. package/containers/WeChat/RichmediaTemplates/View/reducer.js +0 -23
  290. package/containers/WeChat/RichmediaTemplates/View/sagas.js +0 -11
  291. package/containers/WeChat/RichmediaTemplates/View/selectors.js +0 -25
  292. package/utils/asyncInjectors.js +0 -78
  293. package/utils/callNativeEvent.js +0 -16
  294. package/utils/checkStore.js +0 -21
  295. package/utils/customAuthWrapper.js +0 -62
  296. package/utils/customConnectedAuthWrapper.js +0 -26
  297. package/utils/jed.js +0 -1497
  298. package/utils/smsCharCount.js +0 -351
@@ -1,1756 +0,0 @@
1
- /*
2
- *
3
- * Templates
4
- *
5
- */
6
-
7
- import PropTypes from 'prop-types';
8
-
9
- import React from 'react';
10
- import { connect } from 'react-redux';
11
- import Helmet from 'react-helmet';
12
- import { injectIntl, intlShape } from 'react-intl';
13
- import { createStructuredSelector } from 'reselect';
14
- import moment from "moment";
15
- import _ from 'lodash';
16
- import { bindActionCreators, compose } from 'redux';
17
- import { Row, Select, Spin, Dropdown, Col, Breadcrumb, Menu, Modal} from 'antd';
18
- import { CapInput, CapButton, CapPopover, CapSelect } from '@capillarytech/cap-react-ui-library/';
19
- import { makeSelectTemplates, makeSelectTemplatesResponse } from './selectors';
20
- import { makeSelectCreate as makeSelectCreateSms} from '../Sms/Create/selectors';
21
- import { makeSelectCreate as makeSelectCreateMobilePush } from '../MobilePush/Create/selectors';
22
- import { makeSelectEbill as makeSelectCreateEbill } from '../Ebill/selectors';
23
- import { makeSelectEmail as makeSelectCreateEmail } from '../Email/selectors';
24
- import { makeSelectEdit } from '../Sms/Edit/selectors';
25
- import { makeSelectLine } from '../Line/Create/selectors';
26
- import { UserIsAuthenticated } from '../../utils/authWrapper';
27
- import messages from './messages';
28
- import {checkUnicode} from '../../utils/smsCharCountV2';
29
- import * as actions from './actions';
30
- import * as smsActions from '../Sms/Create/actions';
31
- import * as mobilepushActions from '../MobilePush/Create/actions';
32
- import * as smsEditActions from '../Sms/Edit/actions';
33
- import * as ebillActions from '../Ebill/actions';
34
- import * as emailActions from '../Email/actions';
35
- import * as lineActions from '../Line/Create/actions';
36
- import CardGrid from '../../components/CardGrid';
37
- import PreviewSideBar from '../../components/PreviewSideBar';
38
- import './_templates.scss';
39
- import * as globalActions from '../../containers/Cap/actions';
40
- import { makeSelectAuthenticated } from '../Cap/selectors';
41
- import {getMessageObject} from '../../utils/messageUtils';
42
- import * as commonUtil from '../../utils/common';
43
- import SlideBox from '../../components/SlideBox';
44
- import Pagination from '../../components/Pagination';
45
- import EmailPreview from '../../components/EmailPreview';
46
- import WechatRichmediaTemplatePreview from '../../components/TemplatePreview/WechatRichmediaTemplatePreview';
47
- import { EMAIL } from '../../v2Containers/App/constants';
48
- import injectSaga from '../../utils/injectSaga';
49
- import injectReducer from '../../utils/injectReducer';
50
- import { templateSaga } from './sagas';
51
- import { createSmsSaga } from '../Sms/Create/sagas';
52
- import { editSmsSaga } from '../Sms/Edit/sagas';
53
- import { emailSaga } from '../Email/sagas';
54
- import reducer from './reducer';
55
- import mobilePushCreateReducer from '../MobilePush/Create/reducer';
56
- import lineCreateReducer from '../Line/Create/reducer';
57
- import { ebillSaga } from '../Ebill/sagas';
58
- import { lineCreateSaga } from '../Line/Create/sagas';
59
- import { duplicateMPushSaga } from '../MobilePush/Create/sagas';
60
- import { FALSE, TRUE, TYPE_EMBEDDED } from './constants';
61
- import { DEFAULT } from '../../v2Containers/Cap/constants';
62
-
63
- const MenuItem = Menu.Item;
64
- const Option = Select.Option;
65
- const BreadcrumbItem = Breadcrumb.Item;
66
-
67
- export class Templates extends React.Component { // eslint-disable-line react/prefer-stateless-function
68
- constructor(props) {
69
- super(props);
70
- this.state = {
71
- channel: '',
72
- hoveredItem: '',
73
- clickedItem: '',
74
- previewOpen: false,
75
- previewTemplate: {},
76
- searchText: '',
77
- sortBy: 'Most Recent',
78
- selectedAccount: '',
79
- page: 1,
80
- perPageLimit: 25,
81
- templatesCount: 0,
82
- showEdmEmailTemplates: false,
83
- showModal: false,
84
- actionTemplate: {},
85
- showHtmlPreview: false,
86
- device: 'desktop',
87
- searchedTemplates: false,
88
- defaultAccount: true,
89
- modeType: null,
90
- };
91
- this.handleOnHoverItem = this.handleOnHoverItem.bind(this);
92
- this.handleOnItemClick = this.handleOnItemClick.bind(this);
93
- this.handleEditClick = this.handleEditClick.bind(this);
94
- this.handlePreviewClick = this.handlePreviewClick.bind(this);
95
- this.createTemplate = this.createTemplate.bind(this);
96
- this.duplicateTemplate = this.duplicateTemplate.bind(this);
97
- this.deleteTemplate = this.deleteTemplate.bind(this);
98
- this.togglePreview = this.togglePreview.bind(this);
99
- this.searchTemplate = this.searchTemplate.bind(this);
100
- this.handleSortBy = this.handleSortBy.bind(this);
101
- this.getCurrentWindow = this.getCurrentWindow.bind(this);
102
- this.handleFrameTasks = this.handleFrameTasks.bind(this);
103
- this.startTemplateCreation = this.startTemplateCreation.bind(this);
104
- this.startLoading = this.startLoading.bind(this);
105
- this.prepareWeChatPreviewData = this.prepareWeChatPreviewData.bind(this);
106
- this.prepareWeChatMappedPreviewData = this.prepareWeChatMappedPreviewData.bind(this);
107
- this.onAccountSelect = this.onAccountSelect.bind(this);
108
- this.prepareMobilePushPreviewData = this.prepareMobilePushPreviewData.bind(this);
109
- this.menuOnClickEvent = this.menuOnClickEvent.bind(this);
110
- }
111
-
112
- componentWillMount() {
113
- if (this.state.channel === '') {
114
- let channel = '';
115
-
116
- switch (this.props.route.name.toLowerCase()) {
117
- case "sms":
118
- channel = 'Sms';
119
- break;
120
- case "mobilepush":
121
- channel = "MobilePush";
122
- this.props.actions.getWeCrmAccounts(channel);
123
- break;
124
- case "wechat":
125
- channel = 'wechat';
126
- this.props.actions.getWeCrmAccounts();
127
- break;
128
- case "email":
129
- channel = 'Email';
130
- break;
131
- case "ebill":
132
- channel = 'Ebill';
133
- break;
134
- case "line":
135
- channel = "Line";
136
- break;
137
- default:
138
- channel = '';
139
- }
140
- this.setState({ channel });
141
- this.props.actions.getUserList();
142
- }
143
- }
144
-
145
- componentDidMount() {
146
- if (this.props.location.query.type === 'embedded' && this.isEnabledInLibraryModule("setLocale")) {
147
- this.setLocale();
148
- }
149
- 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' || this.state.channel.toLowerCase() === 'mobilepush') && !_.isEmpty(this.props.Templates.selectedWeChatAccount))) {
150
- const queryParams = {
151
- // name: this.state.searchText,
152
- // sortBy: this.state.sortBy,
153
- };
154
- if (this.state.channel.toLowerCase() === 'wechat' && !_.isEmpty(this.props.Templates.selectedWeChatAccount)) {
155
- queryParams.wecrmId = this.props.Templates.selectedWeChatAccount.configs.wecrm_app_id;
156
- queryParams.wecrmToken = this.props.Templates.selectedWeChatAccount.configs.wecrm_token;
157
- queryParams.originalId = this.props.Templates.selectedWeChatAccount.sourceAccountIdentifier;
158
- }
159
- if (this.state.channel.toLowerCase() === "mobilepush" && !_.isEmpty(this.props.Templates.selectedWeChatAccount)) {
160
- queryParams.accountId = this.props.Templates.selectedWeChatAccount.id;
161
- }
162
- queryParams.page = this.state.page;
163
- queryParams.perPage = this.state.perPageLimit;
164
- const channel = this.state.channel;
165
- this.props.actions.getAllTemplates(channel, queryParams);
166
- //this.getAllTemplates({});
167
- // if (this.state.channel.toLowerCase() === "email") {
168
- // this.props.actions.getEdmDefaultTemplates();
169
- // }
170
- }
171
-
172
- window.addEventListener("message", this.handleFrameTasks);
173
- }
174
- componentWillReceiveProps(nextProps) {
175
-
176
- const params = {
177
- name: this.state.searchText,
178
- sortBy: this.state.sortBy,
179
- };
180
- if (!_.isEmpty(this.props.TemplatesList) && !this.props.Templates.getAllTemplatesInProgress && this.props.TemplatesList[0] && this.props.TemplatesList[0].totalCount && this.state.templatesCount === 0) {
181
- this.setState({templatesCount: this.props.TemplatesList[0].totalCount});
182
- }
183
- if (!_.isEqual(nextProps.route.name, this.props.route.name)) {
184
- let channel = '';
185
- this.props.actions.resetTemplate();
186
- this.props.actions.resetAccount();
187
- if (nextProps.route.name.toLowerCase() === 'sms') {
188
- channel = 'Sms';
189
- } else if (nextProps.route.name.toLowerCase() === 'wechat') {
190
- this.setState({defaultAccount: true});
191
- channel = 'wechat';
192
- nextProps.actions.getWeCrmAccounts();
193
- } else if (nextProps.route.name.toLowerCase() === 'email') {
194
- channel = 'Email';
195
- // this.props.actions.getEdmDefaultTemplates();
196
- } else if (nextProps.route.name.toLowerCase() === "mobilepush") {
197
- this.setState({defaultAccount: true});
198
- channel = "mobilepush";
199
- nextProps.actions.getWeCrmAccounts(channel);
200
- } else if (nextProps.route.name.toLowerCase() === 'ebill') {
201
- channel = 'Ebill';
202
- } else if (nextProps.route.name.toLowerCase() === 'line') {
203
- channel = 'Line';
204
- }
205
- //
206
- this.setState({ channel }, () => {
207
- 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))) {
208
- if (this.state.channel.toLowerCase() === 'wechat' && !_.isEmpty(nextProps.Templates.selectedWeChatAccount)) {
209
- params.wecrmId = (nextProps.Templates.selectedWeChatAccount.configs || {}).wecrm_app_id;
210
- params.wecrmToken = (nextProps.Templates.selectedWeChatAccount.configs || {}).wecrm_token;
211
- params.originalId = nextProps.Templates.selectedWeChatAccount.sourceAccountIdentifier;
212
- }
213
- if (this.state.channel.toLowerCase() === "mobilepush" && !_.isEmpty(nextProps.Templates.selectedWeChatAccount)) {
214
- params.accountId = nextProps.Templates.selectedWeChatAccount.id;
215
- }
216
- this.getAllTemplates({params}, true);
217
- }
218
- });
219
- }
220
- if (this.state.channel.toLowerCase() === 'wechat' && nextProps.Templates.selectedWeChatAccount) {
221
- params.wecrmId = (nextProps.Templates.selectedWeChatAccount.configs || {}).wecrm_app_id;
222
- params.wecrmToken = (nextProps.Templates.selectedWeChatAccount.configs || {}).wecrm_token;
223
- params.originalId = nextProps.Templates.selectedWeChatAccount.sourceAccountIdentifier;
224
- }
225
- if (this.state.channel.toLowerCase() === "mobilepush" && nextProps.Templates.selectedWeChatAccount) {
226
- params.accountId = nextProps.Templates.selectedWeChatAccount.id;
227
- }
228
- if ((this.state.channel.toLowerCase() === 'wechat' || this.state.channel.toLowerCase() === 'mobilepush') && _.isEmpty(nextProps.Templates.selectedWeChatAccount) && (this.props.location.query.type === 'embedded') && !this.isEnabledInLibraryModule("showAccountSelection")) {
229
- let selectedAccount = '';
230
- if (_.isEmpty(nextProps.Templates.weCrmAccounts)) {
231
- return;
232
- }
233
- if (this.state.channel.toLowerCase() === 'wechat') {
234
- _.forEach(nextProps.Templates.weCrmAccounts, (account) => {
235
- if (account.configs && account.configs.is_wecrm_enabled) {
236
- if (nextProps.location.query.source_account_id && account.sourceAccountIdentifier === nextProps.location.query.source_account_id) {
237
- selectedAccount = account;
238
- }
239
- }
240
- });
241
- if (!_.isEmpty(selectedAccount)) {
242
- this.setState({selectedAccount: selectedAccount.name}, () => {
243
- params.wecrmId = selectedAccount.configs.wecrm_app_id;
244
- params.wecrmToken = selectedAccount.configs.wecrm_token;
245
- params.originalId = selectedAccount.sourceAccountIdentifier;
246
- nextProps.actions.setWeChatAccount(selectedAccount);
247
- this.getAllTemplates({params});
248
- });
249
- }
250
- } else if (this.state.channel.toLowerCase() === 'mobilepush' && (nextProps.location.query.account_id || nextProps.location.query.source_account_id)) {
251
- _.forEach(nextProps.Templates.weCrmAccounts, (account) => {
252
- if ((nextProps.location.query.account_id && account.id === Number(nextProps.location.query.account_id)) || (nextProps.location.query.source_account_id && account.sourceAccountIdentifier && account.sourceAccountIdentifier === nextProps.location.query.source_account_id)) {
253
- selectedAccount = account;
254
- }
255
- });
256
- this.props.actions.setWeChatAccount(selectedAccount);
257
- params.accountId = Number(nextProps.location.query.account_id);
258
- this.getAllTemplates({params});
259
- }
260
- }
261
- if (this.state.channel.toLowerCase() === "sms" && nextProps.Create && nextProps.Create.response && nextProps.Create.response.templateId && nextProps.Create.response.templateId !== '') {
262
- const message = getMessageObject('success', `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`, true);
263
- this.props.globalActions.addMessageToQueue(message);
264
- this.getAllTemplates({params, resetPage: true});
265
- this.props.smsActions.clearCreateResponse();
266
- }
267
- if (this.state.channel.toLowerCase() === "mobilepush" && nextProps.CreateMobilePush && nextProps.CreateMobilePush.response && nextProps.CreateMobilePush.response.templateId && nextProps.CreateMobilePush.response.templateId !== '') {
268
- if (this.state.channel.toLowerCase() === "mobilepush" && !_.isEmpty(nextProps.Templates.selectedWeChatAccount)) {
269
- params.accountId = nextProps.Templates.selectedWeChatAccount.id;
270
- }
271
- const message = getMessageObject('success', `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`, true);
272
- this.props.globalActions.addMessageToQueue(message);
273
- this.getAllTemplates({params});
274
- this.props.mobilepushActions.clearCreateResponse();
275
- }
276
-
277
- if (this.state.channel.toLowerCase() === "ebill" && nextProps.CreateEbill && nextProps.CreateEbill.createResponse && nextProps.CreateEbill.createResponse.templateId && nextProps.CreateEbill.createResponse.templateId !== '') {
278
- const message = getMessageObject('success', `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`, true);
279
- this.props.globalActions.addMessageToQueue(message);
280
- this.getAllTemplates({params, resetPage: true});
281
- this.props.ebillActions.clearStoreValues();
282
- }
283
-
284
- if (this.state.channel.toLowerCase() === "email" && nextProps.EmailCreate && nextProps.EmailCreate.createResponse && nextProps.EmailCreate.createResponse.templateId && nextProps.EmailCreate.createResponse.templateId !== '') {
285
- const message = getMessageObject('success', `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`, true);
286
- this.props.globalActions.addMessageToQueue(message);
287
- this.getAllTemplates({params, resetPage: true});
288
- this.props.emailActions.clearStoreValues();
289
- }
290
-
291
- if (this.state.channel.toLowerCase() === "line" && nextProps.Line && nextProps.Line.response && nextProps.Line.response.templateId && nextProps.Line.response.templateId !== '') {
292
- const message = getMessageObject('success', `${this.state.channel} ${this.props.intl.formatMessage(messages.templateDuplicateSuccess)}`, true);
293
- this.props.globalActions.addMessageToQueue(message);
294
- this.getAllTemplates({params, resetPage: true});
295
- this.props.lineActions.clearCreateResponse();
296
- }
297
-
298
- if (nextProps.Create && this.props.Create && nextProps.Create.createTemplateError && !_.isEqual(nextProps.Create.createTemplateError, this.props.Create.createTemplateError)) {
299
- const message = getMessageObject('error', this.props.intl.formatMessage(messages.somethingWentWrong), true);
300
- this.props.globalActions.addMessageToQueue(message);
301
- if (this.state.channel.toLowerCase() === "sms") {
302
- this.props.smsActions.clearCreateResponse();
303
- } else if (this.state.channel.toLowerCase() === "mobilepush") {
304
- this.props.mobilepushActions.clearCreateResponse();
305
- } else if (this.state.channel.toLowerCase() === "ebill") {
306
- this.props.ebillActions.clearCreateResponse();
307
- } else if (this.state.channel.toLowerCase() === "line") {
308
- this.props.lineActions.clearCreateResponse();
309
- }
310
- }
311
-
312
- if (nextProps.Edit && nextProps.Edit.editResponse && nextProps.Edit.editResponse.templateId && nextProps.Edit.editResponse.templateId !== '') {
313
- this.props.smsEditActions.clearEditResponse();
314
- }
315
- if (!nextProps.Templates.deleteTemplateInProgress && !_.isEqual(nextProps.Templates.deleteTemplateInProgress, this.props.Templates.deleteTemplateInProgress) &&
316
- nextProps.Templates.deleteResponse) {
317
-
318
- const message = getMessageObject('success', `${this.state.channel.toUpperCase()} ${this.props.intl.formatMessage(messages['Template deleted successfully'])}`, true);
319
- nextProps.globalActions.addMessageToQueue(message);
320
- this.getAllTemplates({params, resetPage: true});
321
- }
322
-
323
- if (!nextProps.Templates.sendingFile && !_.isEqual(this.props.Templates.sendingFile, nextProps.Templates.sendingFile) && !nextProps.Templates.errorSendingFile) {
324
-
325
- const module = this.props.location.query.module ? this.props.location.query.module : 'default';
326
- const isLanguageSupport = (this.props.location.query.isLanguageSupport) ? this.props.location.query.isLanguageSupport : true;
327
- const isEdmSupport = (this.props.location.query.isEdmSupport !== "false") || false;
328
- const type = this.props.location.querytype;
329
- if (this.isEnabledInLibraryModule("callCreateFromProps")) {
330
- this.props.createNew();
331
- return;
332
- }
333
- this.props.router.push({
334
- pathname: `/${(nextProps.route.name || '').toLowerCase()}/create`,
335
- search: commonUtil.createQueryString(type === 'embedded' ? {type: 'embedded', module, isLanguageSupport, isEdmSupport} : {module}),
336
- });
337
- }
338
-
339
- if (!nextProps.Templates.sendingFile && !_.isEqual(this.props.Templates.sendingFile, nextProps.Templates.sendingFile) && nextProps.Templates.errorSendingFile) {
340
- let errorMessage = this.props.intl.formatMessage(messages.zipUploadFailed);
341
- if (nextProps.Templates.errorMessage && nextProps.Templates.errorMessage !== "") {
342
- errorMessage = nextProps.Templates.errorMessage;
343
- }
344
- const message = getMessageObject('error', errorMessage, true);
345
- nextProps.globalActions.addMessageToQueue(message);
346
- }
347
-
348
- if (!_.isEmpty(nextProps.Templates.templateDetails) && !_.isEqual(nextProps.Templates.templateDetails, this.props.Templates.templateDetails)) {
349
- this.setState({previewTemplate: nextProps.Templates.templateDetails});
350
- }
351
-
352
- if (nextProps.Templates.weCrmAccounts !== undefined && nextProps.Templates.weCrmAccounts.length === 1 && this.state.defaultAccount && (['wechat', 'mobilepush'].indexOf(this.state.channel.toLowerCase()) > -1)) {
353
- const paramsDefault = {
354
- name: this.state.searchText,
355
- sortBy: this.state.sortBy,
356
- };
357
- if (this.state.channel.toLowerCase() === 'wechat') {
358
- paramsDefault.wecrmId = nextProps.Templates.weCrmAccounts[0].configs.wecrm_app_id;
359
- paramsDefault.wecrmToken = nextProps.Templates.weCrmAccounts[0].configs.wecrm_token;
360
- paramsDefault.originalId = nextProps.Templates.weCrmAccounts[0].sourceAccountIdentifier;
361
- nextProps.actions.setWeChatAccount(nextProps.Templates.weCrmAccounts[0]);
362
- } else if (this.state.channel.toLowerCase() === 'mobilepush') {
363
- nextProps.actions.setWeChatAccount(nextProps.Templates.weCrmAccounts[0]);
364
- paramsDefault.accountId = nextProps.Templates.weCrmAccounts[0].id;
365
- }
366
- this.setState({defaultAccount: false});
367
- this.getAllTemplates({params: paramsDefault}, true);
368
- }
369
- }
370
-
371
- componentWillUnmount() {
372
-
373
- window.removeEventListener("message", this.handleFrameTasks);
374
- this.props.actions.resetTemplateStoreData();
375
- // this.setState({defaultAccount: false});
376
- }
377
-
378
- onAccountSelect(value, option) {
379
-
380
- this.setState({selectedAccount: value}, () => {
381
- const params = {
382
- name: this.state.searchText,
383
- sortBy: this.state.sortBy,
384
- };
385
- if (this.state.channel.toLowerCase() === 'wechat') {
386
- params.wecrmId = this.props.Templates.weCrmAccounts[_.findIndex(this.props.Templates.weCrmAccounts, { name: value})].configs.wecrm_app_id;
387
- params.wecrmToken = this.props.Templates.weCrmAccounts[_.findIndex(this.props.Templates.weCrmAccounts, { name: value})].configs.wecrm_token;
388
- this.props.actions.setWeChatAccount(this.props.Templates.weCrmAccounts[_.findIndex(this.props.Templates.weCrmAccounts, { name: value})]);
389
- params.originalId = this.props.Templates.weCrmAccounts[_.findIndex(this.props.Templates.weCrmAccounts, { name: value})].sourceAccountIdentifier;
390
- } else if (this.state.channel.toLowerCase() === 'mobilepush') {
391
- this.props.actions.setWeChatAccount(this.props.Templates.weCrmAccounts[_.findIndex(this.props.Templates.weCrmAccounts, { name: value})]);
392
- params.accountId = this.props.Templates.weCrmAccounts[_.findIndex(this.props.Templates.weCrmAccounts, { name: value})].id;
393
- }
394
-
395
- this.getAllTemplates({params, resetPage: true});
396
- });
397
- }
398
-
399
- setLocale = () => {
400
- const user = localStorage.getItem('user');
401
- let locale = 'en';
402
- if (user) {
403
- locale = JSON.parse(user).lang;
404
- }
405
- locale = this.getMappedLocale(locale);
406
- //locale = 'zh';
407
-
408
- moment.locale(locale);
409
- };
410
-
411
- getMappedLocale = (locale) => {
412
- const map = {
413
- 'en': 'en',
414
- 'zh-cn': 'zh',
415
- };
416
- return map[locale];
417
- };
418
-
419
- getAllTemplates = ({params, getNextPage, resetPage}, resetTemplates) => {
420
- let queryParams = params;
421
- let page = this.state.page;
422
-
423
- if (resetTemplates) {
424
- queryParams.name = this.state.searchText;
425
- queryParams.sortBy = this.state.sortBy;
426
- queryParams.page = this.state.page;
427
- queryParams.perPage = this.state.perPageLimit;
428
- const channel = this.state.channel;
429
- this.props.actions.getAllTemplates(channel, queryParams);
430
- } else if ((resetPage || (page === 1 && this.state.templatesCount === 0) || page <= (this.state.templatesCount / this.state.perPageLimit))) {
431
- if (getNextPage) {
432
- page += 1;
433
- }
434
- let templatesCount = this.state.templatesCount;
435
- if (resetPage) {
436
- page = 1;
437
- templatesCount = 0;
438
- }
439
- if (!params || _.isEmpty(params)) {
440
- queryParams = {
441
- name: this.state.searchText,
442
- sortBy: this.state.sortBy,
443
- };
444
- if (this.state.channel.toLowerCase() === 'wechat' && !_.isEmpty(this.props.Templates.selectedWeChatAccount)) {
445
- queryParams.wecrmId = this.props.Templates.selectedWeChatAccount.configs.wecrm_app_id;
446
- queryParams.wecrmToken = this.props.Templates.selectedWeChatAccount.configs.wecrm_token;
447
- queryParams.originalId = this.props.Templates.selectedWeChatAccount.sourceAccountIdentifier;
448
- }
449
- if (this.state.channel.toLowerCase() === "mobilepush" && !_.isEmpty(this.props.Templates.selectedWeChatAccount)) {
450
- queryParams.accountId = this.props.Templates.selectedWeChatAccount.id;
451
- if (this.state.mode) {
452
- queryParams.mode = this.state.mode.toLowerCase();
453
- }
454
- }
455
- }
456
- this.setState({page, templatesCount}, () => {
457
- queryParams.page = page;
458
- queryParams.perPage = this.state.perPageLimit;
459
- const channel = this.state.channel;
460
- this.props.actions.getAllTemplates(channel, queryParams);
461
- });
462
- }
463
- };
464
-
465
- getCurrentWindow(e) {
466
-
467
- const response = {
468
- action: e.action,
469
- value: 'templates',
470
- direction: e.value,
471
- };
472
- parent.postMessage(JSON.stringify(response), '*');
473
- }
474
-
475
- skipTemplateSelection = (e) => {
476
-
477
- const type = this.props.location.query.type;
478
- const module = (type === 'embedded') ? this.props.location.query.module : 'default';
479
- if (this.state.channel.toLowerCase() === 'email') {
480
- const isLanguageSupport = this.props.location.query.isLanguageSupport || false;
481
- this.props.router.push({
482
- pathname: `/email/view`,
483
- search: commonUtil.createQueryString(type === 'embedded' ? {type: 'embedded', module, isLanguageSupport} : {})
484
- });
485
- } else if (this.state.channel.toLowerCase() === 'sms') {
486
- this.props.router.push({
487
- pathname: `/sms/view`,
488
- search: commonUtil.createQueryString(type === 'embedded' ? {type: 'embedded', module} : {})
489
- });
490
- } else if (this.state.channel.toLowerCase() === 'mobilepush') {
491
- this.props.router.push({
492
- pathname: `/mobilepush/edit/${e.template_id}`,
493
- search: commonUtil.createQueryString(type === 'embedded' ? {type: 'embedded', module, account_id: e.account_id} : {})
494
- });
495
- } else if (this.state.channel.toLowerCase() === 'wechat') {
496
- if (e.template_type && e.template_type === 'RICHMEDIA_WECHAT_TEMPLATE') {
497
- this.props.router.push({
498
- pathname: `/wechat/richmedia/edit/${e.template_id}`,
499
- search: commonUtil.createQueryString(type === 'embedded' ? {type: 'embedded', module, source_account_id: e.source_account_id} : {})
500
- });
501
- } else {
502
- this.props.router.push({
503
- pathname: `/wechat/edit/${e.template_id}`,
504
- search: commonUtil.createQueryString(type === 'embedded' ? {type: 'embedded', module, source_account_id: e.source_account_id} : {})
505
- });
506
- }
507
- } else if (this.state.channel.toLowerCase() === 'line') {
508
- this.props.router.push({
509
- pathname: `/line/view/${e.msg_type}/`,
510
- search: commonUtil.createQueryString(type === 'embedded' ? {type: 'embedded', module, account_id: e.account_id } : {})
511
- });
512
- }
513
- this.setState({loading: true});
514
- }
515
-
516
- handleMenuAction = (item = {}, key) => {
517
-
518
- if ((item.key || '').toLowerCase() === 'uploadfile') {
519
- document.getElementById('filename').click();
520
-
521
- } else if ((item.key || '').toLowerCase() === 'useeditor') {
522
-
523
- this.toggleEdmEmailTemplateSelection();
524
- }
525
- };
526
-
527
- handleBlankTemplateAction = (item, channel) => {
528
- const type = this.props.location.query.type;
529
- const module = this.props.location.query.module ? this.props.location.query.module : 'default';
530
- if (item === "uploadFile") {
531
- document.getElementById('filename').click();
532
- } else if (item === "editor") {
533
- this.toggleEdmEmailTemplateSelection();
534
- } else if (this.isEnabledInLibraryModule("callCreateFromProps")) {
535
- this.props.createNew(item);
536
- } else if (item === 'textTemplate') {
537
- this.props.router.push({
538
- pathname: `/${channel === 'line' ? 'line' : 'mobilepush'}/create/text`,
539
- search: commonUtil.createQueryString(type === 'embedded' ? {type: 'embedded', module} : {module},)
540
- });
541
- } else if (item === 'imageTemplate') {
542
- this.props.router.push({
543
- pathname: `/${channel === 'line' ? 'line' : 'mobilepush'}/create/image`,
544
- search: commonUtil.createQueryString(type === 'embedded' ? {type: 'embedded', module} : {module})
545
- });
546
- }
547
- }
548
-
549
- handleFileUpload = (e, {files}) => {
550
- if (files.length === 0) {
551
- return;
552
- }
553
- const fileExtension = files[0].name.split('.').pop();
554
- const supportedZipFormats = ['zip'];
555
- const module = this.props.location.query.module ? this.props.location.query.module : 'default';
556
- const isLanguageSupport = this.props.location.query.isLanguageSupport ? this.props.location.query.isLanguageSupport : true;
557
- const isEdmSupport = (this.props.location.query.isEdmSupport !== "false") || false;
558
-
559
- if (supportedZipFormats.indexOf(fileExtension.toLowerCase()) !== -1) {
560
-
561
- this.props.actions.handleZipUpload(files[0]);
562
- document.getElementById("filename").value = "";
563
- } else if (fileExtension === 'html' || fileExtension === 'htm') {
564
-
565
- const reader = new FileReader();
566
- reader.onload = () => {
567
- const text = reader.result;
568
- this.props.actions.handleHtmlUpload(text);
569
- document.getElementById("filename").value = "";
570
- const type = this.props.location.query.type;
571
- if (this.isEnabledInLibraryModule("callCreateFromProps")) {
572
- this.props.createNew();
573
- return;
574
- }
575
- this.props.router.push({
576
- pathname: `/${this.props.route.name.toLowerCase()}/create`,
577
- search: commonUtil.createQueryString(type === 'embedded' ? {type: 'embedded', module, isLanguageSupport, isEdmSupport} : {module}),
578
- });
579
- };
580
- reader.readAsText(files[0]);
581
- } else {
582
- const message = getMessageObject('error', this.props.intl.formatMessage(messages.invalidUploadFileError), true);
583
- this.props.globalActions.addMessageToQueue(message);
584
- }
585
- };
586
-
587
- prepareWeChatPreviewData(template) {
588
- if (template && template.versions && template.versions.base && !_.isEmpty(template.versions.base)) {
589
- if (template.definition && template.definition.msgcontent && template.definition.msgcontent === "RICH_MEDIA_WECHAT") {
590
- return template.versions.base.mediaList;
591
- }
592
- return this.prepareWeChatMappedPreviewData(template.versions.base.content, template.versions.base.Tag, template.versions.base.data);
593
- }
594
- return 'wrong template';
595
- }
596
-
597
- prepareWeChatMappedPreviewData(content, templateTags, tagData) {
598
- let formattedContent = _.cloneDeep(content);
599
- _.forEach(templateTags, (tag) => {
600
- if (tagData[tag].value !== undefined) {
601
- formattedContent = formattedContent.replace(`{{${tag}.DATA}}`, tagData[tag].value);
602
- }
603
- });
604
- return formattedContent;
605
- }
606
-
607
- prepareMobilePushPreviewData(content) {
608
- let result;
609
- if (content.ANDROID) {
610
- const data = content.ANDROID;
611
- const bodyTextStyle = { WebkitLineClamp: 12};
612
- if (data.expandableDetails && data.expandableDetails.ctas && ((data.expandableDetails.ctas[0] && data.expandableDetails.ctas[0].actionText) || (data.expandableDetails.ctas[1] && data.expandableDetails.ctas[1].actionText))) {
613
- bodyTextStyle.WebkitLineClamp = 10;
614
- }
615
- if (data.expandableDetails && data.expandableDetails.image) {
616
- bodyTextStyle.WebkitLineClamp = 3;
617
- }
618
- result = (
619
- <div className="android-push-message-Container">
620
- <div className="message-pop align-left">
621
- <div className="message-container">
622
- <div className="app-name">
623
- <span className="app-icon"></span> {this.props.Templates.selectedWeChatAccount && this.props.Templates.selectedWeChatAccount.name ? this.props.Templates.selectedWeChatAccount.name : "App name"}
624
- </div>
625
- <div className="title">
626
- {data.title}
627
- </div>
628
- <div className="body-text" style={bodyTextStyle} >
629
- {data.message}
630
- </div>
631
- {data.expandableDetails && data.expandableDetails.image && <div className="body-image">
632
- <img src={data.expandableDetails.image} alt=""/>
633
- </div>}
634
- {(data.expandableDetails && data.expandableDetails.ctas && ((data.expandableDetails.ctas[0] && data.expandableDetails.ctas[0].actionText) || (data.expandableDetails.ctas[1] && data.expandableDetails.ctas[1].actionText))) ?
635
- <div className="actions">
636
- {_.map(data.expandableDetails.ctas, (action) => !!action.actionText &&
637
- <span className="action">{action.actionText && action.actionText.toUpperCase()}</span>)}
638
- </div>
639
- : ''
640
- }
641
- </div>
642
- </div>
643
- </div>);
644
- } else if (content.IOS) {
645
- const data = content.IOS;
646
- const bodyTextStyle = { WebkitLineClamp: 11};
647
- if (data.expandableDetails && data.expandableDetails.ctas && data.expandableDetails.ctas[0] && data.expandableDetails.ctas[0].actionText) {
648
- bodyTextStyle.WebkitLineClamp = 6;
649
- }
650
- if (data.expandableDetails && data.expandableDetails.image) {
651
- bodyTextStyle.WebkitLineClamp = 1;
652
- }
653
- const iosActions = [];
654
- if (data.expandableDetails.ctas && data.expandableDetails.ctas.length) {
655
- if (data.expandableDetails.ctas[0].actionLabel) {
656
- iosActions.push(<div className="actions">
657
- <span className="action">{data.expandableDetails.ctas[0].actionLabel.toUpperCase()}</span>
658
- </div>);
659
- }
660
- if (data.expandableDetails.ctas[0].actionLabel2) {
661
- iosActions.push(<div className="actions">
662
- <span className="action">{data.expandableDetails.ctas[0].actionLabel2.toUpperCase()}</span>
663
- </div>);
664
- }
665
- }
666
-
667
- result = (
668
- <div className="iphone-push-message-Container">
669
- <div className="message-pop align-left">
670
- <div className="message-container">
671
- <div className="app-name">
672
- <span className="app-icon"></span>{this.props.Templates.selectedWeChatAccount && this.props.Templates.selectedWeChatAccount.name ? this.props.Templates.selectedWeChatAccount.name : "App name"} <i className="material-icons">close</i>
673
- </div>
674
- {data.expandableDetails && data.expandableDetails.image && <div className={`body-image ${iosActions.length > 0 ? 'image-half' : ''}`}>
675
- <img src={data.expandableDetails.image} alt=""/>
676
- </div>}
677
- <div className="title">
678
- {data.title}
679
- </div>
680
- <div className="body-text" style={bodyTextStyle}>
681
- {data.message}
682
- </div>
683
- {data.expandableDetails && data.expandableDetails.ctas && data.expandableDetails.ctas[0] && data.expandableDetails.ctas[0].actionText ? iosActions : ''}
684
- </div>
685
- </div>
686
- </div>);
687
- }
688
- return result;
689
- }
690
- startLoading(ifEdit) {
691
-
692
- if (ifEdit) {
693
- this.setState({loading: true});
694
- }
695
- }
696
-
697
- startTemplateCreation(data) {
698
-
699
- if (data.edit) {
700
- const ifUnicode = checkUnicode(data.content);
701
-
702
- const content = data.content;
703
- const tempData = {
704
- 'sms-editor': content,
705
- 'unicode-validity': ifUnicode,
706
- 'base': true,
707
- };
708
- const formData = {};
709
- formData[0] = tempData;
710
- formData.base = tempData;
711
- this.setState({formData, loading: false});
712
- }
713
- }
714
-
715
- handleFrameTasks = (e) => {
716
-
717
- const type = e.data;
718
- if (typeof type === 'object') {
719
-
720
- const action = type.action;
721
- switch (action) {
722
- case "startTemplateCreation":
723
- this.startTemplateCreation(type.value);
724
- break;
725
- case "startLoading":
726
- this.startLoading(type.edit);
727
- break;
728
- case "getCurrentWindow":
729
- this.getCurrentWindow(e.data);
730
- break;
731
- case "skipTemplateSelection":
732
- this.skipTemplateSelection(e.data);
733
- break;
734
- default:
735
- break;
736
- }
737
- }
738
- switch (type) {
739
- case "startTemplateCreation":
740
-
741
- //this.getFormData(e);
742
- break;
743
- case "validateContent":
744
-
745
- this.validateContent(e);
746
- break;
747
- default:
748
- break;
749
- }
750
- };
751
-
752
- createTemplate(ev) {
753
-
754
- const type = this.props.location.query.type;
755
- const module = this.props.location.query.module ? this.props.location.query.module : 'default';
756
- const channel = this.state.channel.toLowerCase();
757
- //const keyType = ev.key && ev.key.toLowerCase() !== undefined ? ev.state.toLowerCase() : '';
758
- if (this.isEnabledInLibraryModule("callCreateFromProps")) {
759
- this.props.createNew();
760
- } else if (ev.key && (ev.key.toLowerCase() === "text" || ev.key.toLowerCase() === "image")) {
761
- this.props.router.push({
762
- pathname: `/${channel === 'line' ? 'line' : 'mobilepush'}/create/${ev.key.toLowerCase()}`,
763
- search: commonUtil.createQueryString(type === 'embedded' ? {type: 'embedded', module} : {module}),
764
- });
765
- } else {
766
- this.props.router.push({
767
- pathname: `/${this.state.channel.toLowerCase()}/create`,
768
- search: commonUtil.createQueryString(type === 'embedded' ? {type: 'embedded', module} : {module}),
769
- });
770
- }
771
- }
772
-
773
- menuOnClickEvent(ev) {
774
- let type = this.props.location.query.type;
775
- const channel = this.state.channel.toLowerCase();
776
- switch (channel) {
777
- case 'wechat':
778
- if (ev && ev.key && ev.key.toLowerCase() === "map_template") {
779
- type = this.props.location.query.type;
780
- this.props.router.push({
781
- pathname: `/wechat/create`,
782
- search: commonUtil.createQueryString(type === 'embedded' ? {type: 'embedded'} : {}),
783
- });
784
- } else if (ev && ev.key && ev.key.toLowerCase() === "richmedia_template") {
785
- type = this.props.location.query.type;
786
- if (this.props.Templates && this.props.Templates.selectedWeChatAccount && this.props.Templates.selectedWeChatAccount.configs && (_.isEmpty(this.props.Templates.selectedWeChatAccount.configs.wechat_app_id) || _.isEmpty(this.props.Templates.selectedWeChatAccount.configs.wechat_app_secret))) {
787
- const errorMessage = this.props.intl.formatMessage(messages.wechatAccountNotConfigured);
788
- const message = getMessageObject('error', errorMessage, true);
789
- this.props.globalActions.addMessageToQueue(message);
790
- } else {
791
- this.props.router.push(`/wechat/richmedia/create?type=embedded`);
792
- }
793
- }
794
- break;
795
- default:
796
- this.props.router.push({
797
- pathname: `*`,
798
- });
799
- break;
800
- }
801
- }
802
-
803
- searchTemplate(data) {
804
-
805
- this.setState({searchText: data}, () => {
806
- const params = {
807
- name: this.state.searchText,
808
- sortBy: this.state.sortBy,
809
- };
810
- if (this.state.channel.toLowerCase() === 'wechat') {
811
- params.wecrmId = this.props.Templates.selectedWeChatAccount.configs.wecrm_app_id;
812
- params.wecrmToken = this.props.Templates.selectedWeChatAccount.configs.wecrm_token;
813
- params.originalId = this.props.Templates.selectedWeChatAccount.sourceAccountIdentifier;
814
- }
815
- if (this.state.channel.toLowerCase() === "mobilepush") {
816
- params.accountId = this.props.Templates.selectedWeChatAccount.id;
817
- }
818
- this.getAllTemplates({params, resetPage: true});
819
- });
820
- }
821
-
822
- handleSortBy(data) {
823
- this.setState({sortBy: data}, () => {
824
- const params = {
825
- name: this.state.searchText,
826
- sortBy: this.state.sortBy,
827
- };
828
- if (this.state.channel.toLowerCase() === 'wechat') {
829
- params.wecrmId = this.props.Templates.selectedWeChatAccount.configs.wecrm_app_id;
830
- params.wecrmToken = this.props.Templates.selectedWeChatAccount.configs.wecrm_token;
831
- params.originalId = this.props.Templates.selectedWeChatAccount.sourceAccountIdentifier;
832
- }
833
- if (this.state.channel.toLowerCase() === "mobilepush") {
834
- params.accountId = this.props.Templates.selectedWeChatAccount.id;
835
- }
836
- this.getAllTemplates({params, resetPage: true});
837
- });
838
- }
839
- handleType = (data = {}) => {
840
- this.setState({mode: data}, () => {
841
- const params = {
842
- name: this.state.searchText,
843
- sortBy: this.state.sortBy,
844
- };
845
- if (this.state.channel.toLowerCase() === "mobilepush") {
846
- params.accountId = this.props.Templates.selectedWeChatAccount.id;
847
- }
848
- if ( (this.state.channel.toLowerCase() === 'mobilepush' || this.state.channel.toLowerCase() === 'line') && data.toLowerCase() !== "all") {
849
- params.mode = this.state.mode.toLowerCase();
850
- }
851
- this.getAllTemplates({params, resetPage: true});
852
- });
853
- };
854
- togglePreview() {
855
- if (this.state.channel.toLowerCase() === 'ebill' || this.state.channel.toLowerCase() === 'email') {
856
- this.toggleEmailPreview();
857
- } else {
858
-
859
- this.setState( (prevState) => ({
860
- previewOpen: !prevState.previewOpen}));
861
- }
862
- }
863
-
864
- toggleEdmEmailTemplateSelection = () => {
865
-
866
- this.setState( (prevState) => ({
867
- showEdmEmailTemplates: !prevState.showEdmEmailTemplates}), () => {
868
- this.props.actions.getEdmDefaultTemplates();
869
- });
870
- };
871
-
872
- deleteTemplate(template) {
873
-
874
- this.props.actions.deleteTemplate(this.state.channel.toUpperCase(), template._id);
875
- this.setState({actionTemplate: {}});
876
- }
877
-
878
- duplicateTemplate(template) {
879
-
880
- const duplicateObj = _.cloneDeep(template);
881
- duplicateObj.name = `${this.props.intl.formatMessage(messages.copyOf)} ${template.name} ${moment().format('MM-DD-YYYY HH:mm:ss')}`;
882
- delete duplicateObj._id;
883
- if (this.state.channel.toLowerCase() === "sms") {
884
- this.props.smsActions.createTemplate(duplicateObj);
885
- } else if (this.state.channel.toLowerCase() === "mobilepush") {
886
- duplicateObj.definition.accountId = this.props.Templates.selectedWeChatAccount.id;
887
- this.props.mobilepushActions.createTemplate(duplicateObj);
888
- } else if (this.state.channel.toLowerCase() === "ebill") {
889
- this.props.ebillActions.createTemplate(duplicateObj);
890
- } else if (this.state.channel.toLowerCase() === "email") {
891
- this.props.emailActions.duplicateTemplate(template._id, "EMAIL");
892
- } else if (this.state.channel.toLowerCase() === "line") {
893
- this.props.lineActions.createTemplate(duplicateObj, (response) => {
894
- const params = {
895
- name: this.state.searchText,
896
- sortBy: this.state.sortBy,
897
- };
898
- this.getAllTemplates({params, resetPage: true});
899
- });
900
- }
901
- }
902
-
903
- handleOnHoverItem(isHovering, id) {
904
-
905
- if (isHovering) {
906
- this.setState({hoveredItem: id});
907
- } else {
908
- this.setState({hoveredItem: ''});
909
- }
910
- }
911
-
912
- handleOnItemClick(isClicked, id) {
913
-
914
- this.setState({clickedItem: id});
915
- }
916
-
917
- handleEdmDefaultTemplateSelection = (isSelected, id) => {
918
- if (isSelected) {
919
- const template = _.find(this.props?.Templates?.cmsTemplates, (template = []) => {
920
- return template?.versions && template?.versions?.base && _.get(template, 'versions.base.drag_drop_id') === id;
921
- });
922
- const {type,module = DEFAULT} = this.props?.location?.query;
923
- const isLanguageSupport = this.props?.location?.query?.isLanguageSupport === TRUE;
924
- const isEdmSupport = this.props?.location?.query?.isEdmSupport !== FALSE;
925
- let getQuery = '';
926
-
927
- if (template) {
928
- this.props.actions.setEdmTemplate({
929
- ...template,
930
- isEdmSupport,
931
- isLanguageSupport,
932
- projectId: template?.versions?.base?.drag_drop_id,
933
- });
934
-
935
- if (this.state.channel && this.state.channel.toLowerCase() === EMAIL) {
936
- getQuery = (type === TYPE_EMBEDDED) ? {
937
- type: TYPE_EMBEDDED,
938
- module,
939
- isLanguageSupport: isLanguageSupport ? 1 : 0,
940
- isEdmSupport: isEdmSupport ? 1 : 0,
941
- projectId: template?.versions?.base?.drag_drop_id,
942
- } : {
943
- module,
944
- isLanguageSupport: isLanguageSupport ? 1 : 0,
945
- isEdmSupport: isEdmSupport ? 1 : 0,
946
- projectId: template?.versions?.base?.drag_drop_id,
947
- };
948
- } else {
949
- getQuery = (type === TYPE_EMBEDDED) ? {type: TYPE_EMBEDDED, module} : {module};
950
- }
951
-
952
- if (this.isEnabledInLibraryModule("callCreateFromProps")) {
953
- this.props.createNew();
954
- return;
955
- }
956
-
957
- this.props.router.push({
958
- pathname: `/${this.state.channel.toLowerCase()}/create`,
959
- search: commonUtil.createQueryString(getQuery),
960
- });
961
- }
962
- }
963
- };
964
-
965
- handleEditClick(e, id, modeType, path) {
966
-
967
- if (modeType && modeType !== undefined) {
968
- this.setState({modeType});
969
- }
970
- const type = this.props.location.query.type;
971
- const module = this.props.location.query.module;
972
- const isLanguageSupport = (this.props.location.query.isLanguageSupport) ? this.props.location.query.isLanguageSupport : false;
973
- const isEdmSupport = (this.props.location.query.isEdmSupport !== "false") || false;
974
- let getQuery = "";
975
- let pathName = path;
976
-
977
- e.stopPropagation();
978
-
979
- this.props.actions.resetTemplateData();
980
- if (this.state.channel.toLowerCase() === 'sms') {
981
- pathName = `/sms/edit/${id}`;
982
- }
983
- if (this.state.channel.toLowerCase() === 'mobilepush') {
984
- pathName = `/mobilepush/edit/${id}`;
985
- }
986
- if (this.state.channel.toLowerCase() === 'email') {
987
- pathName = `/email/edit/${id}`;
988
- }
989
- if (this.state.channel.toLowerCase() === 'email') {
990
- getQuery = type === 'embedded' ? {type: 'embedded', module, isLanguageSupport, isEdmSupport} : {module, isEdmSupport};
991
- } else {
992
- getQuery = type === 'embedded' ? {type: 'embedded', module, account_id: this.props.location.query.account_id} : {module};
993
- }
994
- if (this.state.channel.toLowerCase() === 'ebill') {
995
- pathName = `/ebill/edit/${id}`;
996
- }
997
- if (this.state.channel.toLowerCase() === 'line') {
998
- pathName = `/line/edit/${modeType}/${id}`;
999
- }
1000
- if (this.isEnabledInLibraryModule("callSelectFromProps")) {
1001
- this.props.onSelectTemplate(id);
1002
- } else {
1003
- if (this.state.channel.toLowerCase() === 'ebill') {
1004
- pathName = `/ebill/edit/${id}`;
1005
- }
1006
- //getQuery
1007
- this.props.router.push({
1008
- pathname: pathName,
1009
- search: commonUtil.createQueryString(getQuery),
1010
- });
1011
- }
1012
- }
1013
-
1014
- handlePreviewClick(template, modeType) {
1015
- this.togglePreview();
1016
- const templateInfo = _.cloneDeep(template);
1017
- if (this.state.channel.toLowerCase() === 'line') {
1018
- templateInfo.modeType = modeType;
1019
- }
1020
- templateInfo.updatedByName = commonUtil.getUserNameById(parseInt(template.updatedBy, 10), commonUtil.getMergedUserList(this.props.Templates.userList));
1021
- if (this.state.channel === 'wechat') {
1022
- templateInfo.content = this.prepareWeChatPreviewData(template);
1023
- } else if (this.state.channel.toLowerCase() === "mobilepush") {
1024
- templateInfo.content = template.versions.base;
1025
- templateInfo.appName = this.props.Templates.selectedWeChatAccount.name;
1026
- } else if (this.state.channel.toLowerCase() === "email") {
1027
-
1028
- this.props.actions.getTemplateDetails(template._id, EMAIL);
1029
- } else if (this.state.channel.toLowerCase() === 'ebill') {
1030
- this.props.actions.getTemplateDetails(template._id);
1031
- }
1032
- if (this.state.channel.toLowerCase() !== 'ebill') {
1033
- this.setState({previewTemplate: templateInfo});
1034
- }
1035
- }
1036
-
1037
- toggleDeleteTemplateModal = (template) => {
1038
- this.setState({actionTemplate: template}, () => {
1039
- this.setState({showModal: true});
1040
- });
1041
- }
1042
-
1043
- handleOk = () => {
1044
- this.setState({showModal: false});
1045
- this.deleteTemplate(this.state.actionTemplate);
1046
- }
1047
-
1048
- handleCancel = () => {
1049
- this.setState({showModal: false});
1050
- }
1051
-
1052
- populateTemplatesList = (data, blankTemplateRequired, layoutSelection) => {
1053
- if (!data) {
1054
- return [];
1055
- }
1056
- const type = this.props.location.query.type;
1057
- const items = [];
1058
- const channel = this.state.channel.toLowerCase();
1059
-
1060
- if (type === 'embedded' && channel !== 'wechat' && blankTemplateRequired) {
1061
- let content;
1062
- if (channel === 'sms') {
1063
- content = (<div className="sms-template-content" onClick={this.createTemplate}>
1064
- <div style={{textAlign: 'center', lineHeight: '260px'}} className="sms-text">{this.props.intl.formatMessage(messages.blankTemplate)}</div>
1065
- </div>);
1066
- } else if (channel === 'email') {
1067
- content = (<div className="sms-template-content">
1068
- <div style={{textAlign: 'center', lineHeight: '260px'}} className="sms-text">
1069
- <div>
1070
- <button type="button" className="ant-btn cap-button edit-button ant-btn-ghost" onClick={() => this.handleBlankTemplateAction('uploadFile')}><span>{this.props.intl.formatMessage(messages.uploadFile)}</span></button>
1071
- <button type="button" className="ant-btn cap-button preview-button ant-btn-danger" onClick={() => this.handleBlankTemplateAction('editor')}><span>{this.props.intl.formatMessage(messages.useEditor)}</span></button>
1072
- </div>
1073
- </div>
1074
- </div>);
1075
- } else if (channel === 'mobilepush' || channel === 'line') {
1076
- content = (<div className="sms-template-content">
1077
- <div style={{textAlign: 'center', lineHeight: '260px'}} className="sms-text">
1078
- <div>
1079
- <button
1080
- type="button"
1081
- className="ant-btn cap-button edit-button ant-btn-ghost"
1082
- onClick={() => this.handleBlankTemplateAction('textTemplate', channel)}>
1083
- <span>{this.props.intl.formatMessage(messages.textTemplate)}</span>
1084
- </button>
1085
- <button
1086
- type="button"
1087
- className="ant-btn cap-button preview-button ant-btn-danger"
1088
- onClick={() => this.handleBlankTemplateAction('imageTemplate', channel)}>
1089
- <span>{this.props.intl.formatMessage(messages.imageTemplate)}</span>
1090
- </button>
1091
- </div>
1092
- </div>
1093
- </div>);
1094
- }
1095
- items.push(
1096
- {
1097
- id: 'blankTemplate',
1098
- content,
1099
- }
1100
- );
1101
- } /*else if (type === 'embedded' && this.state.channel.toLowerCase() === "mobilepush") {
1102
- items.push({
1103
- id: 'blankTemplate',
1104
- content: <div className={this.state.clickedItem === 'blankTemplate' ? 'sms-text-blurred' : ''}>
1105
- <div>
1106
- <div
1107
- style={{textAlign: 'center', lineHeight: '260px'}}
1108
- className="sms-text">{this.props.intl.formatMessage(messages.blankTemplate)}</div>
1109
- </div>
1110
- {this.state.clickedItem === 'blankTemplate' && <CapButton
1111
- onClick={() => { this.createTemplate({key: 'text'}); }} key="text" className="edit-button" type="secondary">Text</CapButton>}
1112
- {this.state.clickedItem === 'blankTemplate' && <CapButton
1113
- onClick={() => { this.createTemplate({key: 'image'}); }} key="image" className="preview-button" type="secondary">image</CapButton>}
1114
- </div>,
1115
- });
1116
- }*/
1117
- data.map( (template = {}) => {
1118
- //
1119
- const temp = {};
1120
- //
1121
- 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');
1122
- let content = '';
1123
- temp.id = template._id;
1124
- if (this.state.channel === 'wechat' && (template.type || '').toLowerCase() === 'wechat') {
1125
- let path = '';
1126
- if (template && template.versions && template.versions.base && !_.isEmpty(template.versions.base)) {
1127
- if (template.definition && template.definition.msgcontent && template.definition.msgcontent === "RICH_MEDIA_WECHAT") {
1128
- path = `/wechat/richmedia/edit/${template._id}`;
1129
- content = <WechatRichmediaTemplatePreview type={this.props.location && this.props.location.query.type ? this.props.location.query.type : ''} content={template.versions.base.mediaList}/>;
1130
- } else {
1131
- path = `/wechat/edit/${template._id}`;
1132
- content = this.prepareWeChatPreviewData(template);
1133
- }
1134
- temp.content = (
1135
- <div
1136
- className="sms-template-content">
1137
- <div className={`sms-text ${this.state.hoveredItem === template._id ? 'sms-text-blurred' : ''}`}>
1138
- {content || ''}
1139
- </div>
1140
- {template._id === this.state.hoveredItem ? <CapButton onClick={(e) => this.handleEditClick(e, template._id, null, path)} className="edit-button" type="secondary">{type === 'embedded' ? this.props.intl.formatMessage(messages.selectButton) : this.props.intl.formatMessage(messages.editButton)}</CapButton> : ''}
1141
- {template._id === this.state.hoveredItem ? <CapButton onClick={() => this.handlePreviewClick(template)} className="preview-button" type="cancel">{this.props.intl.formatMessage(messages.previewButton)}</CapButton> : ''}
1142
- </div>
1143
- );
1144
- }
1145
- } else if (this.state.channel.toLowerCase() === 'email' || this.state.channel.toLowerCase() === 'ebill') {
1146
- //
1147
-
1148
- const imgSrc = template && template.versions && template.versions.base ? template.versions.base.preview_http_url : '';
1149
- const ifPreviewGenerated = template && template.versions && template.versions.base ? template.versions.base.isPreviewGenerated : 0;
1150
- content = <img src={imgSrc || ''} alt={this.props.intl.formatMessage(messages.previewGenerateText)} width="100%" height="100%"/>;
1151
-
1152
- temp.content = (
1153
- <div
1154
- className="sms-template-content">
1155
- <div className={`sms-text ${this.state.hoveredItem === template._id ? 'sms-text-blurred' : ''}`}>
1156
- {content}
1157
- </div>
1158
- {!layoutSelection && template._id === this.state.hoveredItem ? <CapButton onClick={(e) => this.handleEditClick(e, template._id)} className="edit-button" type="secondary">{type === 'embedded' ? this.props.intl.formatMessage(messages.selectButton) : this.props.intl.formatMessage(messages.editButton)}</CapButton> : ''}
1159
- {layoutSelection && template._id === this.state.hoveredItem ? <CapButton onClick={(event) =>{this.handleEdmDefaultTemplateSelection(true, template?.versions?.base?.drag_drop_id); event.stopPropagation();}} className="select-button" type="secondary">{type === 'embedded' ? this.props.intl.formatMessage(messages.selectDefaultButton) : this.props.intl.formatMessage(messages.selectDefaultButton)}</CapButton> : ''}
1160
- {!layoutSelection && template._id === this.state.hoveredItem ? <CapButton onClick={() => this.handlePreviewClick(template)} className="preview-button" type="cancel">{this.props.intl.formatMessage(messages.previewButton)}</CapButton> : ''}
1161
- </div>);
1162
- } else if (this.state.channel.toLowerCase() === 'mobilepush') {
1163
- content = this.prepareMobilePushPreviewData(template.versions.base);
1164
- temp.content = (
1165
- <div>
1166
- <div className={`mobilepush-message ${this.state.hoveredItem === template._id ? 'sms-text-blurred' : ''}`}>
1167
- {content || ''}
1168
- </div>
1169
- {template._id === this.state.hoveredItem ? <CapButton onClick={(e) => this.handleEditClick(e, template._id)} className="edit-button" type="secondary">{type === 'embedded' ? this.props.intl.formatMessage(messages.selectButton) : this.props.intl.formatMessage(messages.editButton)}</CapButton> : ''}
1170
- {template._id === this.state.hoveredItem ? <CapButton onClick={() => this.handlePreviewClick(template)} className="preview-button" type="cancel">{this.props.intl.formatMessage(messages.previewButton)}</CapButton> : ''}
1171
- </div>);
1172
- } else if (this.state.channel.toLowerCase() === 'line' && template.type && template.type.toLowerCase() === 'line') {
1173
- //content = template.versions.base.messages[0].Text;
1174
- content = {
1175
- bodyText: template.versions.base.content.messages[0].text ? template.versions.base.content.messages[0].text : '',
1176
- bodyImage: template.versions.base.content.messages[0].originalContentUrl ? template.versions.base.content.messages[0].originalContentUrl : '',
1177
- };
1178
- const modeType = template.versions.base.content.messages[0].type;
1179
- temp.content = (
1180
- <div className="sms-template-content" key={template._id}>
1181
- {content.bodyText ? <div className={`sms-text ${this.state.hoveredItem === template._id ? 'sms-text-blurred' : ''}`}>{content.bodyText || ''}</div> : ''}
1182
- {content.bodyImage ? <div className={`sms-text ${this.state.hoveredItem === template._id ? 'sms-text-blurred' : ''}`}>
1183
- <img src={content.bodyImage} role={"presentation"} style={{maxWidth: '100%', objectFit: 'cover', height: '100%'}}/></div> : ''}
1184
- {template._id === this.state.hoveredItem ? <CapButton onClick={(e) => this.handleEditClick(e, template._id, modeType)} className="edit-button" type="secondary">{type === 'embedded' ? this.props.intl.formatMessage(messages.selectButton) : this.props.intl.formatMessage(messages.editButton)}</CapButton> : ''}
1185
- {template._id === this.state.hoveredItem ? <CapButton onClick={() => this.handlePreviewClick(template, modeType)} className="preview-button" type="cancel">{this.props.intl.formatMessage(messages.previewButton)}</CapButton> : ''}
1186
- </div>
1187
- );
1188
- } else {
1189
- content = template && template.versions && template.versions.base ? template.versions.base['sms-editor'] : '';
1190
- for (let idx = 2; idx <= 5; idx += 1) {
1191
- if ((content === '' || !content) && template && template.versions && template.versions.base && template && template.versions && template.versions.base[`sms-editor${idx}`]) {
1192
- content = template.versions.base[`sms-editor${idx}`];
1193
- }
1194
- }
1195
- temp.content = (
1196
- <div
1197
- className="sms-template-content">
1198
- <div className={`sms-text ${this.state.hoveredItem === template._id ? 'sms-text-blurred' : ''}`}>{content || ''}</div>
1199
- {template._id === this.state.hoveredItem ? <CapButton onClick={(e) => this.handleEditClick(e, template._id)} className="edit-button" type="secondary">{type === 'embedded' ? this.props.intl.formatMessage(messages.selectButton) : this.props.intl.formatMessage(messages.editButton)}</CapButton> : ''}
1200
- {template._id === this.state.hoveredItem ? <CapButton onClick={() => this.handlePreviewClick(template)} className="preview-button" type="cancel">{this.props.intl.formatMessage(messages.previewButton)}</CapButton> : ''}
1201
- </div>
1202
- );
1203
- }
1204
- let availableTemplates = "Android";
1205
- if (template.versions && template.versions.base && template.versions.base.ANDROID && template.versions.base.IOS) {
1206
- availableTemplates = `${availableTemplates} & IOS`;
1207
- } else if (template.versions && template.versions.base && template.versions.base.IOS) {
1208
- availableTemplates = 'iOS';
1209
- }
1210
- let deleteOption = this.props.intl.formatMessage(messages.deleteButton);
1211
- if (this.state.channel.toLowerCase() === 'wechat' && !template.definition) {
1212
- deleteOption = this.props.intl.formatMessage(messages.unMapButton);
1213
- }
1214
- if (!layoutSelection) {
1215
- temp.footer = (
1216
- <div className="footer-container">
1217
- <div className="card-title">
1218
- <span className="template-name" style={{ fontWeight: `${this.state.channel.toLowerCase() === 'wechat' ? '400' : '600'}` }}>
1219
- { template && template.versions && template.versions.history && template.versions.history.length > 1 && this.state.channel.toLowerCase() !== 'mobilepush' && <i style={{fontSize: '16px', margin: '0 8px 0 0', verticalAlign: 'middle'}} className="material-icons">filter_none</i>}
1220
- {template.name}
1221
- </span>
1222
- {this.props.location.query.type !== 'embedded' && <CapPopover
1223
- trigger="click"
1224
- content={
1225
- <div className="popover-content">
1226
- {this.state.channel !== 'wechat' && <div className="popover-action-container">
1227
- <span onClick={() => this.duplicateTemplate(template)} className="popover-action" style={{cursor: 'pointer', padding: '8px 0px'}}>{this.props.intl.formatMessage(messages.duplicateButton)}</span>
1228
- </div>}
1229
- <div className="popover-action-container">
1230
- <span onClick={() => this.toggleDeleteTemplateModal(template)} className="popover-action" style={{cursor: 'pointer', padding: '8px 0px'}}>{deleteOption}</span>
1231
- </div>
1232
- </div>
1233
- }
1234
- placement="bottomRight"
1235
- >
1236
- <i className="material-icons options-icon">&#xE5D4;</i>
1237
- </CapPopover>}
1238
- </div>
1239
- {this.state.channel.toLowerCase() === "mobilepush" ?
1240
- <p className="card-detail">{availableTemplates}</p>
1241
- :
1242
- <p className="card-detail">{this.props.intl.formatMessage(messages.uploadedAt)}: {updateDateTime}</p>
1243
- }
1244
- </div>
1245
- );
1246
- }
1247
- items.push(temp);
1248
- return true;
1249
- });
1250
- return items;
1251
- };
1252
-
1253
- toggleEmailPreview = () => {
1254
- this.setState({ showHtmlPreview: !this.state.showHtmlPreview }, () => {
1255
- if (!this.state.showHtmlPreview) {
1256
- this.setState({previewTemplate: {}});
1257
- }
1258
- });
1259
- };
1260
-
1261
- changePreviewDevice = (device) => {
1262
- this.setState({ device });
1263
- };
1264
-
1265
- //Gets called only when creatives gets used as node library
1266
- isEnabledInLibraryModule = (property) => {
1267
- if (this.props.location.query.type === "embedded" && this.props.location.query.module === "library") {
1268
- switch (property) {
1269
- case "showAccountSelection":
1270
- return (this.props.route && (this.props.route.name.toLowerCase() === "wechat" || this.props.route.name.toLowerCase() === "mobilepush"));
1271
- case "setLocale":
1272
- return true;
1273
- case "callCreateFromProps":
1274
- return true;
1275
- case "callSelectFromProps":
1276
- return true;
1277
- default:
1278
- return false;
1279
- }
1280
- } else {
1281
- return false;
1282
- }
1283
- }
1284
-
1285
- isLoading = () => {
1286
- const lineLoader = (this.props.Templates.getAllTemplatesInProgress && this.state.channel.toLowerCase() === 'line');
1287
- const smsLoader = (this.props.Templates.getAllTemplatesInProgress && this.state.channel.toLowerCase() === 'sms');
1288
- const wechatLoader = (((this.state.selectedAccount !== '' && this.props.Templates.getAllTemplatesInProgress) || (this.props.Templates.fetchingWeCrmAccounts)) && this.state.channel.toLowerCase() === 'wechat');
1289
- const mobilePushLoader = (((this.props.Templates.getAllTemplatesInProgress) || (this.props.Templates.fetchingWeCrmAccounts)) && this.state.channel.toLowerCase() === 'mobilepush');
1290
- const emailLoader = ((this.props.Templates.getAllTemplatesInProgress || this.props.Templates.sendingFile) && this.state.channel.toLowerCase() === 'email');
1291
- const ebillLoader = ((this.props.Templates.getAllTemplatesInProgress || this.props.Templates.sendingFile) && this.state.channel.toLowerCase() === 'ebill');
1292
- const isLoading = ((wechatLoader !== undefined) ? wechatLoader : false) ||
1293
- (smsLoader !== undefined ? smsLoader : false) ||
1294
- (emailLoader !== undefined ? emailLoader : false) ||
1295
- (ebillLoader !== undefined ? ebillLoader : false) ||
1296
- (mobilePushLoader !== undefined ? mobilePushLoader : false) ||
1297
- (lineLoader !== undefined ? lineLoader : false);
1298
- return isLoading;
1299
- }
1300
- renderDeleteConfirmationModal = () => {
1301
- const modal =
1302
- (<Modal
1303
- visible={this.state.showModal}
1304
- title={"Alert"}
1305
- onOk={this.handleOk}
1306
- onCancel={this.handleCancel}
1307
- footer={[
1308
- <CapButton key="back" onClick={this.handleCancel}>{this.props.intl.formatMessage(messages.cancelText)}</CapButton>,
1309
- <CapButton key="submit" type="primary" id="delete-version" onClick={this.handleOk}>
1310
- {this.props.intl.formatMessage(messages.yesText)}
1311
- </CapButton>,
1312
- ]}
1313
- >
1314
- {this.props.intl.formatMessage(messages.templateDeleteConfirm)}
1315
- </Modal>);
1316
- return modal;
1317
- };
1318
-
1319
-
1320
- renderEmailPreviewModal() {
1321
- const slideboxContent = (
1322
- <div style={{height: "75vh", width: '55vw'}}>
1323
- <iframe />
1324
- </div>
1325
- );
1326
-
1327
- return (
1328
- <SlideBox
1329
- header={this.state.previewTemplate.name}
1330
- content={slideboxContent}
1331
- show={this.state.showEmailPreviewModal}
1332
- handleClose={this.togglePreview}
1333
- width={60}
1334
- />
1335
- );
1336
- }
1337
- render() {
1338
- let pageHeaderText = '';
1339
- const moduleName = this.props.location.query.module;
1340
- if (this.props.location.query.type !== 'embedded') {
1341
- if (this.state.channel.toUpperCase() === 'WECHAT') {
1342
- pageHeaderText = this.props.intl.formatMessage(messages.wechatHeader);
1343
- } else if (this.state.channel.toUpperCase() === 'SMS') {
1344
- pageHeaderText = this.props.intl.formatMessage(messages.smsHeader);
1345
- } else if (this.state.channel.toUpperCase() === 'EMAIL') {
1346
- pageHeaderText = this.props.intl.formatMessage(messages.emailHeader);
1347
- } else if (this.state.channel.toUpperCase() === 'MOBILEPUSH') {
1348
- pageHeaderText = this.props.intl.formatMessage(messages.mobilepushHeader);
1349
- } else if (this.state.channel.toUpperCase() === 'EBILL') {
1350
- pageHeaderText = this.props.intl.formatMessage(messages.ebillHeader);
1351
- } else if (this.state.channel.toUpperCase() === 'LINE') {
1352
- pageHeaderText = this.props.intl.formatMessage(messages.lineHeader);
1353
- }
1354
- }
1355
- const options = [
1356
- {
1357
- value: "Most Recent",
1358
- label: this.props.intl.formatMessage(messages.mostRecentOption),
1359
- },
1360
- {
1361
- value: "Alphabetically",
1362
- label: this.props.intl.formatMessage(messages.alphabeticallyOption),
1363
- },
1364
- ];
1365
- const typeOptions = [
1366
- {
1367
- value: "All",
1368
- label: this.props.intl.formatMessage(messages.all),
1369
- },
1370
- {
1371
- label: this.props.intl.formatMessage(messages.text),
1372
- value: 'Text',
1373
- },
1374
- {
1375
- label: this.props.intl.formatMessage(messages.image),
1376
- value: "Image",
1377
- },
1378
- ];
1379
- const filterContent = (
1380
- <div className="action-container">
1381
- <CapInput
1382
- className="search-text"
1383
- style={{width: '210px'}}
1384
- placeholder={this.props.intl.formatMessage(messages.searchText)}
1385
- prefix={<i className="material-icons" style={{ margin: '0', fontSize: '16px'}}>search</i>}
1386
- value={this.state.searchText}
1387
- onChange={(e) => this.searchTemplate(e.target.value)}
1388
- />
1389
- <div className="action-container">
1390
- <div style={{display: "flex", justifyContent: "space-between", alignItems: 'center'}}>
1391
- <div className="select-font">{this.props.intl.formatMessage(messages.sortBy)}</div>
1392
- <CapSelect key={"select-account"} style={{width: '120px', marginLeft: '16px', minWidth: 'initial'}} defaultValue="Most Recent" onChange={this.handleSortBy} options={options}>
1393
- </CapSelect>
1394
- </div>
1395
- { (this.state.channel.toLowerCase() === 'mobilepush' || this.state.channel.toLowerCase() === 'line') &&
1396
- <div style={{display: "flex", justifyContent: "space-between", alignItems: 'center', marginLeft: '16px'}}>
1397
- <div className="select-font">{this.props.intl.formatMessage(messages.type)}</div>
1398
- <CapSelect key={"select-type"} style={{width: '120px', marginLeft: '16px', minWidth: 'initial'}} defaultValue="All" onChange={this.handleType} options={typeOptions}>
1399
- </CapSelect>
1400
- </div>
1401
- }
1402
- </div>
1403
- </div>
1404
- );
1405
- const accountOptions = [];
1406
- if ((this.state.channel.toUpperCase() === 'WECHAT' || this.state.channel.toUpperCase() === "MOBILEPUSH") && !_.isEmpty(this.props.Templates.weCrmAccounts)) {
1407
- _.forEach(this.props.Templates.weCrmAccounts, (account) => {
1408
- if ((this.state.channel.toUpperCase() === 'WECHAT' && account.configs && account.configs.is_wecrm_enabled) || this.state.channel.toUpperCase() === 'MOBILEPUSH') {
1409
- if (this.props.location.query.type === 'embedded' && (!this.props.location.query.module || (this.props.location.query.module && this.props.location.query.module !== 'library'))) {
1410
- if (this.props.location.query.source_account_id && account.sourceAccountIdentifier === this.props.location.query.source_account_id) {
1411
- accountOptions.push(
1412
- <Option key={this.state.channel.toUpperCase() === "MOBILEPUSH" ? account.id : account.uuid} value={account.name}>{account.name}</Option>
1413
- );
1414
- } else if (this.props.location.query.module && (this.state.channel.toUpperCase() === "WECHAT" || this.state.channel.toUpperCase() === "MOBILEPUSH")) {
1415
- accountOptions.push(
1416
- <Option key={this.state.channel.toUpperCase() === "MOBILEPUSH" ? account.id : account.uuid} value={account.name}>{account.name}</Option>
1417
- );
1418
- }
1419
- } else {
1420
- accountOptions.push(
1421
- <Option key={this.state.channel.toUpperCase() === "MOBILEPUSH" ? account.id : account.uuid} value={account.name}>{account.name}</Option>
1422
- );
1423
- }
1424
- }
1425
- });
1426
- }
1427
- let templateText = this.state.channel.toUpperCase() === 'WECHAT' ? this.props.intl.formatMessage(messages.selectWechatHeader) : this.props.intl.formatMessage(messages.selectSmsHeader);
1428
-
1429
- let titleText = this.state.channel.toUpperCase() === 'SMS' ? this.props.intl.formatMessage(messages.smsChannelTemplatesHeader) : this.props.intl.formatMessage(messages.wechatChannelTemplatesHeader);
1430
- if (this.state.channel.toUpperCase() === "MOBILEPUSH") {
1431
- templateText = this.props.intl.formatMessage(messages.mobilePushChannelTemplatesHeader);
1432
- titleText = this.props.intl.formatMessage(messages.mobilePushChannel);
1433
- } else if (this.state.channel.toUpperCase() === "EMAIL") {
1434
- templateText = this.props.intl.formatMessage(messages.emailChannelTemplatesHeader);
1435
- titleText = this.props.intl.formatMessage(messages.emailChannel);
1436
- } else if (this.state.channel.toUpperCase() === "EBILL") {
1437
- templateText = this.props.intl.formatMessage(messages.ebillChannelTemplatesHeader);
1438
- titleText = this.props.intl.formatMessage(messages.ebillChannel);
1439
- } else if (this.state.channel.toUpperCase() === "LINE") {
1440
- templateText = this.props.intl.formatMessage(messages.lineChannelTemplatesHeader);
1441
- titleText = this.props.intl.formatMessage(messages.lineChannel);
1442
- }
1443
- const pageHeader = (
1444
- <div>
1445
- {(this.props.location.query.type !== 'embedded') ? `${pageHeaderText}` : templateText}
1446
- {(this.isEnabledInLibraryModule("showAccountSelection") || (((this.state.channel.toUpperCase() === 'WECHAT' || this.state.channel.toUpperCase() === "MOBILEPUSH") && (this.props.location.query.type !== 'embedded') && !_.isEmpty(this.props.Templates.weCrmAccounts)))) &&
1447
- <Select className="selectAccount" onSelect={this.onAccountSelect} value={this.props.Templates.selectedWeChatAccount ? this.props.Templates.selectedWeChatAccount.name : undefined} placeholder={this.props.intl.formatMessage(messages.selectAccount)}>
1448
- {accountOptions}
1449
- </Select>}
1450
- </div>
1451
- );
1452
- const pageHeaderDvs = (
1453
- <div>
1454
- {(this.props.location.query.type === 'embedded' && moduleName === 'dvs') ? `${templateText}` : pageHeaderText}
1455
- {((this.state.channel.toUpperCase() === 'WECHAT' || this.state.channel.toUpperCase() === "MOBILEPUSH") && (this.props.location.query.type === 'embedded') && !_.isEmpty(this.props.Templates.weCrmAccounts)) &&
1456
- <Select className="selectAccount" onSelect={this.onAccountSelect} value={this.props.Templates.selectedWeChatAccount ? this.props.Templates.selectedWeChatAccount.name : undefined} placeholder={this.props.intl.formatMessage(messages.selectAccount)}>
1457
- {accountOptions}
1458
- </Select>}
1459
- </div>
1460
- );
1461
- let actionButton = '';
1462
- if (this.props.location.query.type !== 'embedded') {
1463
- if (this.state.channel.toUpperCase() === 'WECHAT') {
1464
- const createPushMenu = (
1465
- <Menu onClick={this.menuOnClickEvent}>
1466
- <MenuItem key="map_template">
1467
- {this.props.intl.formatMessage(messages.mapTemplate)}
1468
- </MenuItem>
1469
- <MenuItem key="richmedia_template">
1470
- {this.props.intl.formatMessage(messages.weChatRichmediaTemplate)}
1471
- </MenuItem>
1472
- </Menu>
1473
- );
1474
- actionButton = (<Dropdown disabled={_.isEmpty(this.props.Templates.selectedWeChatAccount)} overlay={createPushMenu} trigger={['click']}>
1475
- <CapButton style={{paddingLeft: '24px', paddingRight: '4px'}}>
1476
- <div style={{display: 'inline-flex'}}>
1477
- <p style={{ lineHeight: '28px'}}>{this.props.intl.formatMessage(messages.newTemplate)}</p>
1478
- <p style={{ height: '28px'}}>
1479
- <i style={{ color: '#fff', paddingTop: '2px', margin: '0', paddingRight: '8px'}} className="material-icons">arrow_drop_down</i>
1480
- </p>
1481
- </div>
1482
- </CapButton>
1483
- </Dropdown>);
1484
- } else if (this.state.channel.toUpperCase() === 'EMAIL' || this.state.channel.toUpperCase() === 'EBILL') {
1485
- const menuItems = [];
1486
- menuItems.push(<MenuItem key={'uploadFile'}>{this.props.intl.formatMessage(messages.uploadFile)}</MenuItem>);
1487
- menuItems.push(<MenuItem key={'useEditor'}>{this.props.intl.formatMessage(messages.useEditor)}</MenuItem>);
1488
- const menu = (
1489
- <Menu onClick={this.handleMenuAction}>
1490
- {menuItems}
1491
- </Menu>
1492
- );
1493
- actionButton = (
1494
- <Dropdown overlay={menu} trigger={["click"]}>
1495
- <CapButton style={{paddingLeft: '24px', paddingRight: '4px'}}>
1496
- <div style={{display: 'inline-flex'}}>
1497
- <p style={{ lineHeight: '32px', paddingRight: '12px' }}>{this.props.intl.formatMessage(messages.newTemplate)}</p>
1498
- <p style={{ height: '32px' }}>
1499
- <i style={{ color: '#fff', lineHeight: '32px', margin: '0'}} className="material-icons">arrow_drop_down</i>
1500
- </p>
1501
- </div>
1502
- </CapButton>
1503
- </Dropdown>
1504
- );
1505
- } else if (this.props.route.name.toLowerCase() === "mobilepush") {
1506
- const createPushMenu = (
1507
- <Menu onClick={this.createTemplate}>
1508
- <MenuItem key="text">
1509
- {this.props.intl.formatMessage(messages.textTemplate)}
1510
- </MenuItem>
1511
- <MenuItem key="image">
1512
- {this.props.intl.formatMessage(messages.imageTemplate)}
1513
- </MenuItem>
1514
- </Menu>
1515
- );
1516
- actionButton = (<Dropdown disabled={_.isEmpty(this.props.Templates.selectedWeChatAccount)} overlay={createPushMenu} trigger={['click']}>
1517
- <CapButton style={{paddingLeft: '24px', paddingRight: '4px'}}>
1518
- <div style={{display: 'inline-flex'}}>
1519
- <p style={{ lineHeight: '28px'}}>{this.props.intl.formatMessage(messages.newTemplate)}</p>
1520
- <p style={{ height: '28px'}}>
1521
- <i style={{ color: '#fff', paddingTop: '2px', margin: '0', paddingRight: '8px'}} className="material-icons">arrow_drop_down</i>
1522
- </p>
1523
- </div>
1524
- </CapButton>
1525
- </Dropdown>);
1526
- } else if (this.props.route.name.toLowerCase() === "line") {
1527
- const lineMenu = (
1528
- <Menu onClick={this.createTemplate}>
1529
- <MenuItem key="text">
1530
- {this.props.intl.formatMessage(messages.textTemplate)}
1531
- </MenuItem>
1532
- <MenuItem key="image">
1533
- {this.props.intl.formatMessage(messages.imageTemplate)}
1534
- </MenuItem>
1535
- </Menu>
1536
- );
1537
- actionButton = (<Dropdown overlay={lineMenu} trigger={['click']}>
1538
- <CapButton style={{paddingLeft: '24px', paddingRight: '4px'}}>
1539
- <div style={{display: 'inline-flex'}}>
1540
- <p style={{ lineHeight: '28px'}}>{this.props.intl.formatMessage(messages.newTemplate)}</p>
1541
- <p style={{ height: '28px'}}>
1542
- <i style={{ color: '#fff', paddingTop: '2px', margin: '0', paddingRight: '8px'}} className="material-icons">arrow_drop_down</i>
1543
- </p>
1544
- </div>
1545
- </CapButton>
1546
- </Dropdown>);
1547
- } else {
1548
- actionButton = (<CapButton onClick={this.createTemplate}>{this.state.channel.toUpperCase() === 'SMS' ? this.props.intl.formatMessage(messages.createSmsActionButton) : 'Create SMS'}</CapButton>);
1549
- }
1550
- }
1551
-
1552
-
1553
- let previewHeader = this.props.intl.formatMessage(messages.preview);
1554
- // const previewHeader = (this.state.channel.toLowerCase() === 'email' ? <h3>{this.props.intl.formatMessage(messages.emailPreview)}</h3> : <h3>{this.props.intl.formatMessage(messages.ebillPreview)}</h3>);
1555
- if (this.state.channel.toLowerCase() === 'email' || this.state.channel.toLowerCase() === 'ebill') {
1556
- if (this.state.previewTemplate && this.state.previewTemplate.name !== '') {
1557
- previewHeader = this.state.previewTemplate.name;
1558
- }
1559
- }
1560
-
1561
- const cmsTemplateSelectionContent = (
1562
- <CardGrid
1563
- className={""}
1564
- listItem={this.populateTemplatesList(this.props.Templates.cmsTemplates, false, true)}
1565
- // filterContent={filterContent}
1566
- onHoverItem={this.handleOnHoverItem}
1567
- onItemClick={this.handleEdmDefaultTemplateSelection}
1568
- colNumber={2}
1569
- >
1570
- </CardGrid>
1571
- );
1572
-
1573
- let htmlPreviewContent = "";
1574
- if (this.state.channel.toLowerCase() === 'ebill') {
1575
- htmlPreviewContent = this.state.previewTemplate && this.state.previewTemplate.versions && this.state.previewTemplate.versions.base && this.state.previewTemplate.versions.base['ebill-editor'];
1576
- } else if (this.state.channel.toLowerCase() === 'email') {
1577
- htmlPreviewContent = this.state.previewTemplate && this.state.previewTemplate.versions && this.state.previewTemplate.versions.base && (this.state.previewTemplate.versions.base[this.props.Global.currentOrgDetails.basic_details.base_language ? this.props.Global.currentOrgDetails.basic_details.base_language : 'en'] || {})['template-content'];
1578
- }
1579
-
1580
- const templateList = this.populateTemplatesList(this.props.TemplatesList, true);
1581
-
1582
- const isSearch = this.props.Templates.isSearch;
1583
- return (
1584
- <div>
1585
- <Spin
1586
- 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)}
1587
- spinning={this.isLoading()}
1588
- >
1589
- <input type="file" id="filename" style={{ display: 'none'}} accept=".zip, .html, .htm" onChange={(event) => this.handleFileUpload(event, {files: event.target.files})} />
1590
- <Row>
1591
- <Col>
1592
- {this.props.location.query.type !== "embedded" &&
1593
- <Breadcrumb>
1594
- <BreadcrumbItem>{this.props.intl.formatMessage(messages.campaigns)}</BreadcrumbItem>
1595
- <BreadcrumbItem>{this.props.intl.formatMessage(messages.creatives)}</BreadcrumbItem>
1596
- <BreadcrumbItem>{this.props.intl.formatMessage(messages[this.state.channel]) }</BreadcrumbItem>
1597
- </Breadcrumb>
1598
- }
1599
- </Col>
1600
- </Row>
1601
- <Row className="template-header-container">
1602
- <div className="template-header">{(this.props.location.query.type === 'embedded' && moduleName === 'dvs') ? pageHeaderDvs : pageHeader}</div>
1603
- {actionButton}
1604
- </Row>
1605
- <Row>
1606
- <Helmet
1607
- title={titleText}
1608
- meta={[
1609
- { name: 'description', content: this.props.intl.formatMessage(messages.descriptionTemplates) },
1610
- ]}
1611
- />
1612
- {((templateList && templateList.length > 0) || isSearch) && <Pagination onPageChange={() => { this.getAllTemplates({getNextPage: true}); }} paginationSelector="pagination-container">
1613
- <CardGrid
1614
- className={this.state.channel.toLowerCase() === "mobilepush" ? "mobilepush-templates" : ""}
1615
- listItem={templateList}
1616
- filterContent={filterContent}
1617
- onHoverItem={this.handleOnHoverItem}
1618
- onItemClick={this.handleOnItemClick}
1619
- enablePagination
1620
- >
1621
- </CardGrid>
1622
- </Pagination>}
1623
- {(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'}}>
1624
- <span style={{ fontFamily: 'open-sans', fontSize: '24px', color: '#B5B5B5'}}>{this.props.intl.formatMessage(messages.noAccountMessage)}</span>
1625
- </div>}
1626
- {(((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'}}>
1627
- <span style={{ fontFamily: 'open-sans', fontSize: '24px', color: '#B5B5B5'}}>{this.props.intl.formatMessage(messages.noTemplatesMessage)}</span>
1628
- </div>}
1629
- </Row>
1630
- <Row>
1631
- {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' ?
1632
- <WechatRichmediaTemplatePreview
1633
- show={this.state.previewOpen}
1634
- closeSlideBox={this.togglePreview}
1635
- header={this.state.previewTemplate.name}
1636
- width={30}
1637
- showSlidebox
1638
- const type={this.props.location && this.props.location.query.type ? this.props.location.query.type : ''}
1639
- content={this.state.previewTemplate.versions.base.mediaList}
1640
- onEditClick={this.handleEditClick}
1641
- showEdit
1642
- templateId={this.state.previewTemplate._id}
1643
- path={`/wechat/richmedia/edit/${this.state.previewTemplate._id}`}
1644
- />
1645
- :
1646
- <PreviewSideBar
1647
- showPreview={this.state.previewOpen}
1648
- templateData={this.state.previewTemplate}
1649
- channel={this.state.channel}
1650
- handleClose={this.togglePreview}
1651
- onEditClick={this.handleEditClick}
1652
- embedded={this.props.location.query.type === 'embedded'}
1653
- onDuplicateClick={this.duplicateTemplate}
1654
- location={this.props.location}
1655
- >
1656
- </PreviewSideBar>
1657
- }
1658
- {(this.state.channel.toLowerCase() === 'ebill' || this.state.channel.toLowerCase() === 'email') && htmlPreviewContent && <EmailPreview
1659
- header={previewHeader}
1660
- content={htmlPreviewContent}
1661
- show={this.state.showHtmlPreview}
1662
- device={this.state.device}
1663
- handleClose={this.toggleEmailPreview}
1664
- changePreviewDevice={this.changePreviewDevice}
1665
- lastModified={this.state.previewTemplate ? this.state.previewTemplate.updatedAt : ''}
1666
- updatedByName={commonUtil.getUserNameById(parseInt(this.state.previewTemplate.updatedBy, 10), commonUtil.getMergedUserList(this.props.Templates.userList))}
1667
- />}
1668
- <SlideBox
1669
- header={(<h3>{this.props.intl.formatMessage(messages.layoutSelection)}</h3>)}
1670
- width={60}
1671
- content={cmsTemplateSelectionContent}
1672
- show={this.state.showEdmEmailTemplates}
1673
- handleClose={this.toggleEdmEmailTemplateSelection}
1674
- loadingText={this.props.intl.formatMessage(messages.loadingEDMTemplates)}
1675
- isLoading={this.props.Templates.getCmsTemplatesInProgress}
1676
- />
1677
- {this.renderDeleteConfirmationModal()}
1678
- </Row>
1679
- </Spin>
1680
- </div>
1681
- );
1682
- }
1683
- }
1684
-
1685
- Templates.propTypes = {
1686
- actions: PropTypes.object.isRequired,
1687
- smsActions: PropTypes.object,
1688
- mobilepushActions: PropTypes.object,
1689
- smsEditActions: PropTypes.object,
1690
- ebillActions: PropTypes.object,
1691
- emailActions: PropTypes.object,
1692
- TemplatesList: PropTypes.array,
1693
- Templates: PropTypes.object,
1694
- route: PropTypes.object,
1695
- router: PropTypes.object,
1696
- Create: PropTypes.object,
1697
- location: PropTypes.object,
1698
- globalActions: PropTypes.object,
1699
- intl: intlShape.isRequired,
1700
- Global: PropTypes.object,
1701
- createNew: PropTypes.func,
1702
- onSelectTemplate: PropTypes.func,
1703
- lineActions: PropTypes.object,
1704
- };
1705
-
1706
- const mapStateToProps = createStructuredSelector({
1707
- Templates: makeSelectTemplates(),
1708
- TemplatesList: makeSelectTemplatesResponse(),
1709
- Create: makeSelectCreateSms(),
1710
- CreateMobilePush: makeSelectCreateMobilePush(),
1711
- CreateEbill: makeSelectCreateEbill(),
1712
- Edit: makeSelectEdit(),
1713
- EmailCreate: makeSelectCreateEmail(),
1714
- Global: makeSelectAuthenticated(),
1715
- Line: makeSelectLine(),
1716
- });
1717
-
1718
- function mapDispatchToProps(dispatch) {
1719
- return {
1720
- actions: bindActionCreators(actions, dispatch),
1721
- smsActions: bindActionCreators(smsActions, dispatch),
1722
- mobilepushActions: bindActionCreators(mobilepushActions, dispatch),
1723
- smsEditActions: bindActionCreators(smsEditActions, dispatch),
1724
- ebillActions: bindActionCreators(ebillActions, dispatch),
1725
- emailActions: bindActionCreators(emailActions, dispatch),
1726
- globalActions: bindActionCreators(globalActions, dispatch),
1727
- lineActions: bindActionCreators(lineActions, dispatch),
1728
- };
1729
- }
1730
-
1731
- const withSaga = injectSaga({ key: 'templates', saga: templateSaga });
1732
- const withCreateSmsSaga = injectSaga({ key: 'create', saga: createSmsSaga });
1733
- const withEditSmsSaga = injectSaga({ key: 'edit', saga: editSmsSaga });
1734
- const withEmailSaga = injectSaga({ key: 'email', saga: emailSaga });
1735
- const withEbillSaga = injectSaga({ key: 'ebill', saga: ebillSaga });
1736
- const withMpushSaga = injectSaga({ key: 'mobileCreate', saga: duplicateMPushSaga });
1737
- const withLineCreateSaga = injectSaga({ key: 'line', saga: lineCreateSaga });
1738
- const withReducer = injectReducer({ key: 'templates', reducer });
1739
- const withMPushCreateReducer = injectReducer({ key: 'mobileCreate', reducer: mobilePushCreateReducer });
1740
- const withLineCreateReducer = injectReducer({ key: 'lineTemplates', reducer: lineCreateReducer});
1741
- const withConnect = connect(mapStateToProps, mapDispatchToProps);
1742
-
1743
- export default compose(
1744
- UserIsAuthenticated,
1745
- withSaga,
1746
- withCreateSmsSaga,
1747
- withEditSmsSaga,
1748
- withEmailSaga,
1749
- withMpushSaga,
1750
- withEbillSaga,
1751
- withLineCreateSaga,
1752
- withReducer,
1753
- withMPushCreateReducer,
1754
- withLineCreateReducer,
1755
- withConnect,
1756
- )(injectIntl(Templates));