@capillarytech/creatives-library 8.0.136-alpha.4 → 8.0.136-beta.3

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 (292) hide show
  1. package/components/BreadCrumbs/index.js +65 -0
  2. package/components/BreadCrumbs/messages.js +13 -0
  3. package/components/CapTagList/index.js +235 -0
  4. package/components/CapTagList/messages.js +45 -0
  5. package/components/Card/_customCard.scss +40 -0
  6. package/components/Card/index.js +78 -0
  7. package/components/Card/tests/__snapshots__/index.test.js.snap +22 -0
  8. package/components/Card/tests/index.test.js +20 -0
  9. package/components/CardGrid/index.js +71 -0
  10. package/components/Ckeditor/index.js +238 -0
  11. package/components/Ckeditor/messages.js +13 -0
  12. package/components/Ckeditor/style.scss +3 -0
  13. package/components/Component/index.js +29 -0
  14. package/components/CustomPopOver/index.js +81 -0
  15. package/components/CustomPopOver/messages.js +17 -0
  16. package/components/DateFilter/index.js +349 -0
  17. package/components/DateFilter/messages.js +57 -0
  18. package/components/DateRange/index.js +114 -0
  19. package/components/DateRange/messages.js +25 -0
  20. package/components/Edmeditor/index.js +65 -0
  21. package/components/Edmeditor/messages.js +13 -0
  22. package/components/EmailPreview/_emailPreview.scss +119 -0
  23. package/components/EmailPreview/assets/images/iPad.svg +10 -0
  24. package/components/EmailPreview/assets/images/mobile.png +0 -0
  25. package/components/EmailPreview/index.js +107 -0
  26. package/components/EmailPreview/messages.js +33 -0
  27. package/components/Footer/index.js +27 -0
  28. package/components/Footer/messages.js +13 -0
  29. package/components/FormBuilder/_formBuilder.scss +83 -0
  30. package/components/FormBuilder/index.js +3279 -0
  31. package/components/FormBuilder/messages.js +61 -0
  32. package/components/Header/index.js +44 -0
  33. package/components/Header/messages.js +29 -0
  34. package/components/ImagePreview/_imagePreview.scss +63 -0
  35. package/components/ImagePreview/index.js +52 -0
  36. package/components/ImagePreview/messages.js +17 -0
  37. package/components/PageHeader/_pageHeader.scss +22 -0
  38. package/components/PageHeader/index.js +37 -0
  39. package/components/PageHeader/messages.js +13 -0
  40. package/components/Pagination/_pagination.scss +5 -0
  41. package/components/Pagination/index.js +49 -0
  42. package/components/PreviewSideBar/_previewsidebar.scss +28 -0
  43. package/components/PreviewSideBar/index.js +152 -0
  44. package/components/PreviewSideBar/messages.js +41 -0
  45. package/components/Sidebar/_sidebar.scss +115 -0
  46. package/components/Sidebar/index.js +214 -0
  47. package/components/Sidebar/messages.js +21 -0
  48. package/components/SlideBox/_slideBox.scss +63 -0
  49. package/components/SlideBox/index.js +47 -0
  50. package/components/SlideBox/tests/index.test.js +103 -0
  51. package/components/SmsEditor/index.js +55 -0
  52. package/components/SmsTest/index.js +117 -0
  53. package/components/SmsTest/messages.js +21 -0
  54. package/components/TemplatePreview/WechatRichmediaTemplatePreview/_wechatRichmediaTemplatePrev.scss +42 -0
  55. package/components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +141 -0
  56. package/components/TemplatePreview/WechatRichmediaTemplatePreview/messages.js +21 -0
  57. package/components/TemplatePreview/_templatePreview.scss +642 -0
  58. package/components/TemplatePreview/assets/images/WECHAT_5x.png +0 -0
  59. package/components/TemplatePreview/assets/images/androidPushMessage.svg +45 -0
  60. package/components/TemplatePreview/assets/images/home-screen-android.svg +21 -0
  61. package/components/TemplatePreview/assets/images/home-screen-ios.svg +16 -0
  62. package/components/TemplatePreview/assets/images/iPhonePushMessage.svg +135 -0
  63. package/components/TemplatePreview/assets/images/mobile.svg +24 -0
  64. package/components/TemplatePreview/assets/images/sms-body.png +0 -0
  65. package/components/TemplatePreview/assets/images/sms-icon.png +0 -0
  66. package/components/TemplatePreview/assets/images/sms_mobile.png +0 -0
  67. package/components/TemplatePreview/assets/images/sms_mobile_android.svg +22 -0
  68. package/components/TemplatePreview/assets/images/sms_mobile_ios.svg +16 -0
  69. package/components/TemplatePreview/assets/images/user-icon.svg +19 -0
  70. package/components/TemplatePreview/assets/images/wechat-mobile.svg +78 -0
  71. package/components/TemplatePreview/assets/images/wechat_mobile_android.svg +20 -0
  72. package/components/TemplatePreview/index.js +617 -0
  73. package/components/TemplatePreview/messages.js +78 -0
  74. package/components/Toastr/index.js +60 -0
  75. package/components/Toastr/messages.js +13 -0
  76. package/components/ToastrMessage/index.js +113 -0
  77. package/components/ToastrMessage/messages.js +17 -0
  78. package/components/TopBar/_topbar.scss +46 -0
  79. package/components/TopBar/assets/images/capillary_logo.png +0 -0
  80. package/components/TopBar/assets/images/old_capillary_logo.png +0 -0
  81. package/components/TopBar/index.js +113 -0
  82. package/components/TopBar/messages.js +29 -0
  83. package/containers/App/actions.js +7 -0
  84. package/containers/App/constants.js +114 -0
  85. package/containers/App/index.js +52 -0
  86. package/containers/App/reducer.js +19 -0
  87. package/containers/App/sagas.js +31 -0
  88. package/containers/App/selectors.js +25 -0
  89. package/containers/App/test/saga.test.js +11 -0
  90. package/containers/Assets/Gallery/_gallery.scss +126 -0
  91. package/containers/Assets/Gallery/actions.js +37 -0
  92. package/containers/Assets/Gallery/constants.js +23 -0
  93. package/containers/Assets/Gallery/index.js +473 -0
  94. package/containers/Assets/Gallery/messages.js +93 -0
  95. package/containers/Assets/Gallery/reducer.js +81 -0
  96. package/containers/Assets/Gallery/sagas.js +80 -0
  97. package/containers/Assets/Gallery/selectors.js +25 -0
  98. package/containers/Assets/Gallery/tests/__snapshots__/reducer.test.js.snap +9 -0
  99. package/containers/Assets/Gallery/tests/actions.test.js +25 -0
  100. package/containers/Assets/Gallery/tests/reducer.test.js +96 -0
  101. package/containers/Assets/Gallery/tests/saga.test.js +157 -0
  102. package/containers/Cap/actions.js +66 -0
  103. package/containers/Cap/constants.js +25 -0
  104. package/containers/Cap/index.js +402 -0
  105. package/containers/Cap/messages.js +75 -0
  106. package/containers/Cap/reducer.js +113 -0
  107. package/containers/Cap/sagas.js +159 -0
  108. package/containers/Cap/selectors.js +75 -0
  109. package/containers/Cap/tests/__snapshots__/index.test.js.snap +2269 -0
  110. package/containers/Cap/tests/index.test.js +22 -0
  111. package/containers/Cap/tests/saga.test.js +284 -0
  112. package/containers/Dashboard/actions.js +15 -0
  113. package/containers/Dashboard/constants.js +7 -0
  114. package/containers/Dashboard/index.js +76 -0
  115. package/containers/Dashboard/messages.js +13 -0
  116. package/containers/Dashboard/reducer.js +21 -0
  117. package/containers/Dashboard/sagas.js +17 -0
  118. package/containers/Dashboard/selectors.js +25 -0
  119. package/containers/Dashboard/test/saga.test.js +9 -0
  120. package/containers/Ebill/_ebill.scss +5 -0
  121. package/containers/Ebill/actions.js +43 -0
  122. package/containers/Ebill/constants.js +20 -0
  123. package/containers/Ebill/index.js +1278 -0
  124. package/containers/Ebill/messages.js +77 -0
  125. package/containers/Ebill/reducer.js +72 -0
  126. package/containers/Ebill/sagas.js +74 -0
  127. package/containers/Ebill/selectors.js +25 -0
  128. package/containers/Ebill/test/saga.test.js +11 -0
  129. package/containers/Email/_email.scss +141 -0
  130. package/containers/Email/actions.js +81 -0
  131. package/containers/Email/constants.js +36 -0
  132. package/containers/Email/index.js +3325 -0
  133. package/containers/Email/messages.js +289 -0
  134. package/containers/Email/reducer.js +142 -0
  135. package/containers/Email/sagas.js +135 -0
  136. package/containers/Email/selectors.js +31 -0
  137. package/containers/Email/test/saga.test.js +671 -0
  138. package/containers/LanguageProvider/actions.js +17 -0
  139. package/containers/LanguageProvider/constants.js +8 -0
  140. package/containers/LanguageProvider/index.js +80 -0
  141. package/containers/LanguageProvider/reducer.js +30 -0
  142. package/containers/LanguageProvider/selectors.js +20 -0
  143. package/containers/LanguageProvider/tests/actions.test.js +19 -0
  144. package/containers/LanguageProvider/tests/index.test.js +78 -0
  145. package/containers/LanguageProvider/tests/reducer.test.js +20 -0
  146. package/containers/LanguageProvider/tests/selectors.test.js +15 -0
  147. package/containers/Line/Create/_lineCreate.scss +54 -0
  148. package/containers/Line/Create/actions.js +90 -0
  149. package/containers/Line/Create/constants.js +39 -0
  150. package/containers/Line/Create/index.js +836 -0
  151. package/containers/Line/Create/messages.js +189 -0
  152. package/containers/Line/Create/reducer.js +99 -0
  153. package/containers/Line/Create/sagas.js +121 -0
  154. package/containers/Line/Create/selectors.js +36 -0
  155. package/containers/Line/Create/tests/saga.test.js +202 -0
  156. package/containers/Line/Edit/_lineEdit.scss +35 -0
  157. package/containers/Line/Edit/actions.js +79 -0
  158. package/containers/Line/Edit/constants.js +27 -0
  159. package/containers/Line/Edit/index.js +1050 -0
  160. package/containers/Line/Edit/messages.js +177 -0
  161. package/containers/Line/Edit/reducer.js +83 -0
  162. package/containers/Line/Edit/sagas.js +80 -0
  163. package/containers/Line/Edit/selectors.js +29 -0
  164. package/containers/Line/Edit/test/saga.test.js +160 -0
  165. package/containers/Login/assets/images/capillary_logo.png +0 -0
  166. package/containers/Login/components/LoginForm/index.js +62 -0
  167. package/containers/Login/components/LoginForm/messages.js +33 -0
  168. package/containers/Login/index.js +130 -0
  169. package/containers/Login/messages.js +25 -0
  170. package/containers/Login/selectors.js +25 -0
  171. package/containers/MobilePush/Create/_mobilePushCreate.scss +39 -0
  172. package/containers/MobilePush/Create/actions.js +46 -0
  173. package/containers/MobilePush/Create/constants.js +23 -0
  174. package/containers/MobilePush/Create/index.js +2303 -0
  175. package/containers/MobilePush/Create/messages.js +269 -0
  176. package/containers/MobilePush/Create/reducer.js +70 -0
  177. package/containers/MobilePush/Create/sagas.js +74 -0
  178. package/containers/MobilePush/Create/selectors.js +28 -0
  179. package/containers/MobilePush/Create/test/saga.test.js +19 -0
  180. package/containers/MobilePush/Edit/_mobilePushCreate.scss +39 -0
  181. package/containers/MobilePush/Edit/actions.js +91 -0
  182. package/containers/MobilePush/Edit/constants.js +35 -0
  183. package/containers/MobilePush/Edit/index.js +2601 -0
  184. package/containers/MobilePush/Edit/messages.js +266 -0
  185. package/containers/MobilePush/Edit/reducer.js +112 -0
  186. package/containers/MobilePush/Edit/sagas.js +126 -0
  187. package/containers/MobilePush/Edit/selectors.js +29 -0
  188. package/containers/MobilePush/Edit/tests/saga.test.js +255 -0
  189. package/containers/NotFoundPage/index.js +25 -0
  190. package/containers/NotFoundPage/messages.js +13 -0
  191. package/containers/NotFoundPage/tests/index.test.js +17 -0
  192. package/containers/Sms/Create/_smsCreate.scss +42 -0
  193. package/containers/Sms/Create/actions.js +27 -0
  194. package/containers/Sms/Create/constants.js +16 -0
  195. package/containers/Sms/Create/index.js +1488 -0
  196. package/containers/Sms/Create/messages.js +109 -0
  197. package/containers/Sms/Create/reducer.js +41 -0
  198. package/containers/Sms/Create/sagas.js +40 -0
  199. package/containers/Sms/Create/selectors.js +28 -0
  200. package/containers/Sms/Create/test/saga.test.js +11 -0
  201. package/containers/Sms/Edit/actions.js +40 -0
  202. package/containers/Sms/Edit/constants.js +17 -0
  203. package/containers/Sms/Edit/index.js +1472 -0
  204. package/containers/Sms/Edit/messages.js +105 -0
  205. package/containers/Sms/Edit/reducer.js +50 -0
  206. package/containers/Sms/Edit/sagas.js +60 -0
  207. package/containers/Sms/Edit/selectors.js +32 -0
  208. package/containers/Sms/Edit/test/saga.test.js +13 -0
  209. package/containers/TagList/_tagList.scss +8 -0
  210. package/containers/TagList/actions.js +15 -0
  211. package/containers/TagList/constants.js +32 -0
  212. package/containers/TagList/index.js +236 -0
  213. package/containers/TagList/messages.js +13 -0
  214. package/containers/TagList/reducer.js +23 -0
  215. package/containers/TagList/sagas.js +11 -0
  216. package/containers/TagList/selectors.js +25 -0
  217. package/containers/Templates/_templates.scss +333 -0
  218. package/containers/Templates/actions.js +103 -0
  219. package/containers/Templates/constants.js +60 -0
  220. package/containers/Templates/index.js +1756 -0
  221. package/containers/Templates/messages.js +337 -0
  222. package/containers/Templates/reducer.js +142 -0
  223. package/containers/Templates/sagas.js +163 -0
  224. package/containers/Templates/selectors.js +28 -0
  225. package/containers/Templates/test/saga.test.js +241 -0
  226. package/containers/WeChat/MapTemplates/_mapTemplates.scss +8 -0
  227. package/containers/WeChat/MapTemplates/actions.js +52 -0
  228. package/containers/WeChat/MapTemplates/constants.js +28 -0
  229. package/containers/WeChat/MapTemplates/index.js +1610 -0
  230. package/containers/WeChat/MapTemplates/messages.js +157 -0
  231. package/containers/WeChat/MapTemplates/reducer.js +74 -0
  232. package/containers/WeChat/MapTemplates/sagas.js +84 -0
  233. package/containers/WeChat/MapTemplates/selectors.js +25 -0
  234. package/containers/WeChat/MapTemplates/test/saga.test.js +155 -0
  235. package/containers/WeChat/RichmediaTemplates/Create/_createRichmedia.scss +57 -0
  236. package/containers/WeChat/RichmediaTemplates/Create/actions.js +36 -0
  237. package/containers/WeChat/RichmediaTemplates/Create/constants.js +15 -0
  238. package/containers/WeChat/RichmediaTemplates/Create/index.js +1071 -0
  239. package/containers/WeChat/RichmediaTemplates/Create/messages.js +165 -0
  240. package/containers/WeChat/RichmediaTemplates/Create/reducer.js +60 -0
  241. package/containers/WeChat/RichmediaTemplates/Create/richmediaschema.js +497 -0
  242. package/containers/WeChat/RichmediaTemplates/Create/sagas.js +51 -0
  243. package/containers/WeChat/RichmediaTemplates/Create/selectors.js +37 -0
  244. package/containers/WeChat/RichmediaTemplates/Create/test/saga.test.js +13 -0
  245. package/containers/WeChat/RichmediaTemplates/Edit/actions.js +20 -0
  246. package/containers/WeChat/RichmediaTemplates/Edit/constants.js +10 -0
  247. package/containers/WeChat/RichmediaTemplates/Edit/index.js +136 -0
  248. package/containers/WeChat/RichmediaTemplates/Edit/messages.js +13 -0
  249. package/containers/WeChat/RichmediaTemplates/Edit/reducer.js +28 -0
  250. package/containers/WeChat/RichmediaTemplates/Edit/sagas.js +36 -0
  251. package/containers/WeChat/RichmediaTemplates/Edit/selectors.js +30 -0
  252. package/containers/WeChat/RichmediaTemplates/Edit/test/saga.test.js +12 -0
  253. package/containers/WeChat/RichmediaTemplates/View/actions.js +15 -0
  254. package/containers/WeChat/RichmediaTemplates/View/constants.js +7 -0
  255. package/containers/WeChat/RichmediaTemplates/View/index.js +47 -0
  256. package/containers/WeChat/RichmediaTemplates/View/messages.js +21 -0
  257. package/containers/WeChat/RichmediaTemplates/View/reducer.js +23 -0
  258. package/containers/WeChat/RichmediaTemplates/View/sagas.js +11 -0
  259. package/containers/WeChat/RichmediaTemplates/View/selectors.js +25 -0
  260. package/index.js +2 -4
  261. package/package.json +1 -1
  262. package/routes.js +202 -136
  263. package/services/getSchema.js +1 -1
  264. package/services/localStorageApi.js +0 -1
  265. package/tests/i18n.test.js +1 -1
  266. package/utils/asyncInjectors.js +78 -0
  267. package/utils/authWrapper.js +1 -1
  268. package/utils/callNativeEvent.js +16 -0
  269. package/utils/checkStore.js +21 -0
  270. package/utils/common.js +2 -2
  271. package/utils/customAuthWrapper.js +62 -0
  272. package/utils/customConnectedAuthWrapper.js +26 -0
  273. package/utils/tagValidations.js +1 -1
  274. package/utils/tests/checkStore.test.js +1 -1
  275. package/utils/tests/customAuth.test.js +1 -1
  276. package/utils/transformerUtils.js +195 -1
  277. package/v2Components/CapTagList/index.js +14 -9
  278. package/v2Components/Carousel/style.scss +1 -1
  279. package/v2Components/EmailMobilePreview/index.js +2 -2
  280. package/v2Components/FormBuilder/index.js +2 -2
  281. package/v2Components/TemplatePreview/index.js +1 -2
  282. package/v2Containers/Cap/tests/saga.test.js +1 -1
  283. package/v2Containers/Email/index.js +1 -1
  284. package/v2Containers/FTP/index.js +1 -1
  285. package/v2Containers/Line/Container/Text/index.js +6 -6
  286. package/v2Containers/Sms/Create/index.js +2 -2
  287. package/v2Containers/Sms/Edit/index.js +1 -1
  288. package/v2Containers/TagList/index.js +1 -1
  289. package/v2Containers/TagList/utils.js +1 -1
  290. package/v2Containers/Templates/index.js +1 -1
  291. package/v2Containers/Templates/sagas.js +1 -1
  292. package/constants/unified.js +0 -189
@@ -0,0 +1,115 @@
1
+ #cap-sidebar{
2
+ padding: 8px 0 8px 0;
3
+ max-width: 200px;
4
+ min-width: 200px;
5
+ width: 16%;
6
+ overflow-y: hidden;
7
+ // height: 100%;
8
+ // display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */
9
+ // display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */
10
+ // display: -ms-flexbox; /* TWEENER - IE 10 */
11
+ // display: -webkit-flex; /* NEW - Chrome */
12
+ // display: flex;
13
+ overflow-x: hidden;
14
+ .header.item{
15
+ padding-left: 8px !important;
16
+ }
17
+ }
18
+
19
+ .sidebar-container {
20
+ display: -webkit-box; /* OLD - iOS 6-, Safari 3.1-6 */
21
+ display: -moz-box; /* OLD - Firefox 19- (buggy but mostly works) */
22
+ display: -ms-flexbox; /* TWEENER - IE 10 */
23
+ display: -webkit-flex; /* NEW - Chrome */
24
+ display: flex;
25
+ flex: 1;
26
+ -webkit-box-flex: 1;
27
+ -webkit-flex: 1;
28
+ -ms-flex: 1;
29
+ }
30
+
31
+ .sidebar-accordian .content .item.menu-item:hover{
32
+ margin-left: 0 !important;
33
+ text-indent: 0 !important;
34
+ }
35
+ .sidebar-accordian .content .item.menu-item.selected{
36
+ margin-left: 0 !important;
37
+ text-indent: 0 !important;
38
+ }
39
+ .ui.accordion.sidebar-accordian .content .item.selected{
40
+ background: #F2F3F7 !important;
41
+ padding-left: 40px !important;
42
+ }
43
+
44
+ .item.menu-item{
45
+ // margin-left: 0px;
46
+ padding-left: 40px !important;
47
+ border-left-width: 0 !important;
48
+ text-decoration: none;
49
+ }
50
+ .item.menu-item.selected{
51
+ border-left: 4px solid #2e89df !important;
52
+ }
53
+
54
+ .item.menu-item.assetItem{
55
+ padding-left: 28px !important;
56
+ line-height: 28px;
57
+ padding-top: 8px;
58
+ padding-bottom: 8px;
59
+ }
60
+
61
+ .ui.accordion.sidebar-accordian {
62
+ padding-top: 8px !important;
63
+ margin-left: 0;
64
+ }
65
+
66
+ .ui.accordion.sidebar-accordian .title{
67
+ font-size: 12px !important;
68
+ line-height: 32px !important;
69
+ padding-top: 0 !important;
70
+ padding-bottom: 0 !important;
71
+ }
72
+
73
+ .sidebar-width {
74
+ // width: 200px !important;
75
+ max-width: 250px;
76
+ min-width: 190px;
77
+ width: 200px;
78
+ }
79
+ .module-menu-header {
80
+ padding-top: 8px!important;
81
+ line-height: 32px!important;
82
+ font-size: 16px!important;
83
+ margin-left: 0!important;
84
+ padding-left: 8px;
85
+ }
86
+
87
+ // .searchbar {
88
+ // height: 32px;
89
+ // padding-left: 8px;
90
+ // }
91
+
92
+ .menu-header {
93
+ font-size: 12px!important;
94
+ line-height: 32px!important;
95
+ margin: 0!important;
96
+ padding: 0 0 0 8px!important;
97
+ width: 100%;
98
+ }
99
+ .menu-title {
100
+ flex: 0 0 90%!important;
101
+ }
102
+
103
+ .product-select-menu {
104
+ width: 100%;
105
+ padding-left: 2px;
106
+ background: #F2F3F7;
107
+ font-family: proxima-nova;
108
+ font-size: 16px !important;
109
+ font-weight: 600;
110
+
111
+ .ant-select-selection {
112
+ background: #F2F3F7;
113
+ border: none !important;
114
+ }
115
+ }
@@ -0,0 +1,214 @@
1
+ import PropTypes from 'prop-types';
2
+ import React from 'react';
3
+ // import styled from 'styled-components';
4
+ import { Icon, Input, Button, Accordion, AccordionTitle, AccordionContent } from 'semantic-ui-react';
5
+ import { FormattedMessage } from 'react-intl';
6
+ import _ from 'lodash';
7
+ import { Link } from 'react-router-dom';
8
+ import messages from './messages';
9
+ import './_sidebar.scss';
10
+ import { withRouter } from 'react-router-dom';
11
+
12
+ class Sidebar extends React.Component { // eslint-disable-line react/prefer-stateless-function
13
+ constructor(props) {
14
+ super(props);
15
+ this.state = {
16
+ isOpen: false,
17
+ activeItem: '',
18
+ activeIndex: 0,
19
+ menuItems: this.props.menuData,
20
+ searchText: '',
21
+ visible: true,
22
+ };
23
+ this.handleItemClick = this.handleItemClick.bind(this);
24
+ this.handleTitleClick = this.handleTitleClick.bind(this);
25
+ this.handleSearch = this.handleSearch.bind(this);
26
+ this.toggleSideNav = this.toggleSideNav.bind(this);
27
+ this.getLinkElement = this.getLinkElement.bind(this);
28
+ this.selectActiveLinkFromUrl = this.selectActiveLinkFromUrl.bind(this);
29
+ }
30
+
31
+ componentWillMount() {
32
+ this.selectActiveLinkFromUrl(this.props);
33
+ }
34
+
35
+ componentWillReceiveProps(nextProp) {
36
+ this.selectActiveLinkFromUrl(nextProp);
37
+ this.setState({ menuItems: nextProp.menuData });
38
+ }
39
+
40
+ getAccordian(content, keyValue) {
41
+ return (<Accordion key={keyValue}>{content}</Accordion>);
42
+ }
43
+
44
+ getAccordionTitle(title,index) {
45
+ return (
46
+ <AccordionTitle
47
+ index={index}
48
+ active={this.state.activeIndex == index}
49
+ onClick={this.handleTitleClick}>
50
+ <div className="header item">
51
+ <Icon name="dropdown" /> {title}
52
+ </div>
53
+ </AccordionTitle>);
54
+ }
55
+
56
+ getAccordionContent(links, index, keyValue) {
57
+ return (<AccordionContent key={keyValue} active={this.state.activeIndex == index}>{links}</AccordionContent>);
58
+ }
59
+
60
+ getLinkElement(to, text = '', value, isExternal) {
61
+ const selectedItem = (value && value.trim().toLowerCase() === this.state.activeItem) ? 'selected' : '';
62
+ if (text.toLowerCase().includes((this.state.searchText || '').toLowerCase())) {
63
+ if (isExternal) {
64
+ return (text.toLowerCase().includes((this.state.searchText || '').toLowerCase()) ? <a key={to} className={`item menu-item ${selectedItem}`} href={to}>{text}</a> : '');
65
+ }
66
+ return (
67
+ text.toLowerCase().includes((this.state.searchText || '').toLowerCase()) ?
68
+ <Link to={to} className={`item menu-item ${selectedItem}`} onClick={this.handleItemClick} key={to} title={text}>{text}</Link>
69
+ : ''
70
+ );
71
+ }
72
+ return '';
73
+ }
74
+
75
+ selectActiveLinkFromUrl(props) {
76
+ const activeRouteName = this.props?.history?.location?.pathname?.split('/')[1];
77
+ let selectedItem = '';
78
+ let selectedIndex = -1;
79
+ _.forEach(props.menuData, (menuItem, menuIndex) => {
80
+ if (menuItem.items && typeof menuItem.items === 'object') {
81
+ _.forEach(menuItem.items, (menuData = {}) => {
82
+ //
83
+ if ((menuItem.id && menuData.id.toLowerCase() === activeRouteName.toLowerCase()) || (menuData.value.toLowerCase() === activeRouteName.toLowerCase())) {
84
+ selectedIndex = menuIndex;
85
+ selectedItem = activeRouteName.toLowerCase();
86
+ } else if (activeRouteName === 'assets') {
87
+ selectedIndex = menuIndex;
88
+ selectedItem = 'gallery';
89
+ }
90
+ });
91
+ } else if ((menuItem.value || '').toLowerCase() === activeRouteName.toLowerCase()) {
92
+ selectedIndex = menuIndex;
93
+ selectedItem = activeRouteName.toLowerCase();
94
+ }
95
+ });
96
+ this.setState({
97
+ activeIndex: typeof selectedIndex === 'object' ? selectedIndex?.index : selectedIndex,
98
+ activeItem: selectedItem
99
+ });
100
+ }
101
+
102
+ toggleSideNav(e) {
103
+ e.preventDefault();
104
+ this.setState({ visible: !this.state.visible }, () => {
105
+ window.dispatchEvent(new Event('resize'));
106
+ if (!this.state.visible) {
107
+ document.getElementById('cap-sidebar').classList.add('sidebar-collapse');
108
+ } else {
109
+ document.getElementById('cap-sidebar').classList.remove('sidebar-collapse');
110
+ }
111
+ });
112
+ }
113
+
114
+ createAccordianElements(title, contentItems, index) {
115
+ const accordian = [];
116
+ accordian.push(this.getAccordionTitle(title, index));
117
+ const contentLink = contentItems.map((key) =>
118
+ this.getLinkElement(key.link, key.text, key.value, key.external),
119
+ );
120
+ accordian.push(this.getAccordionContent(contentLink, index));
121
+ return accordian;
122
+ }
123
+
124
+ createNavigationElement(menuItems) {
125
+ const navArray = [];
126
+ _.forEach(menuItems, (key, index) => {
127
+ const headerTitle = key.group;
128
+ const isCategory = Object.prototype.hasOwnProperty.call(key, 'categories');
129
+ if (isCategory) { // attach nested Accordion
130
+ const accordian = [];
131
+ const nestedAcordian = [];
132
+ accordian.push(this.getAccordionTitle(headerTitle, index));
133
+ const contentAccordian = this.getAccordian(this.createNavigationElement(key.categories), `nestedAccordian-${index}`);
134
+ nestedAcordian.push(contentAccordian);
135
+ const content = this.getAccordionContent(nestedAcordian, index, `content-${index}`);
136
+ accordian.push(content);
137
+ navArray.push(accordian);
138
+ } else { // attach items to existing accordian
139
+ const accordianElem = this.createAccordianElements(headerTitle, key.items, index);
140
+ navArray.push(accordianElem);
141
+ }
142
+ });
143
+ // const selectedItem = (this.state.activeItem === 'gallery') ? 'selected' : '';
144
+ // navArray.push(
145
+ // <Link
146
+ // to={'/assets'}
147
+ // className={`item menu-item ${selectedItem} assetItem`}
148
+ // key={'assets'}
149
+ // title={'Gallery'}
150
+ // onClick={(e) => this.handleItemClick(e)}
151
+ // >Gallery</Link>
152
+ // );
153
+ return navArray;
154
+ }
155
+
156
+ handleOpen() {
157
+ this.setState({ isOpen: true });
158
+ }
159
+
160
+ handleClose() {
161
+ this.setState({ isOpen: false });
162
+ }
163
+
164
+ handleItemClick(e) {
165
+ this.setState({ activeItem: (e.target.text && e.target.text.trim().toLowerCase()) || '' });
166
+ }
167
+
168
+ handleTitleClick(e, i) {
169
+ this.setState({ activeIndex: this.state.activeIndex === i ? -1 : typeof i === 'object' ? i?.index : i });
170
+ }
171
+
172
+ handleSearch(e) {
173
+ this.setState({ searchText: e.target.value });
174
+ }
175
+
176
+
177
+ render() {
178
+ const visible = this.state.visible;
179
+ const push = !visible ? 'push' : '';
180
+ const collapse = !visible ? 'collapse' : '';
181
+ const toggle = visible ? 'hide' : '';
182
+ // const types = [{ text: 'Creatives', value: 'Creatives' }];
183
+ return (
184
+ <div className="sidebar-container">
185
+ <div className={`sidebar sidebar-width ${collapse}`}>
186
+ <div className="searchbar">
187
+ <FormattedMessage {...messages.inputPlaceholder}>{(message) => <Input icon="search" className="sidebar-search" placeholder={message} fluid onChange={this.handleSearch} />}</FormattedMessage>
188
+ <a href="" onClick={this.toggleSideNav}><i className="material-icons control-arrow">arrow_back</i></a>
189
+ </div>
190
+
191
+ <div className="menu-header">
192
+ <span className="menu-title"><FormattedMessage {...messages.menuTitle} /> </span>
193
+ {this.props.actionComponents}
194
+ </div>
195
+ <Accordion className="sidebar-accordian" activeIndex={this.state.activeIndex}>
196
+ {this.props.menuData && this.createNavigationElement(this.props.menuData)}
197
+ </Accordion>
198
+ </div>
199
+ <div className={`togglebar ${toggle} ${push}`}>
200
+ <Button icon className="btn-toggle" onClick={this.toggleSideNav}>
201
+ <Icon name="bars" />
202
+ </Button>
203
+ </div>
204
+ </div>
205
+ );
206
+ }
207
+ }
208
+
209
+ Sidebar.propTypes = {
210
+ menuData: PropTypes.array.isRequired,
211
+ actionComponents: PropTypes.oneOfType([PropTypes.element, PropTypes.string]),
212
+ };
213
+
214
+ export default withRouter(Sidebar);
@@ -0,0 +1,21 @@
1
+ /*
2
+ * Sidebar Messages
3
+ *
4
+ * This contains all the text for the Sidebar component.
5
+ */
6
+ import { defineMessages } from 'react-intl';
7
+
8
+ export default defineMessages({
9
+ inputPlaceholder: {
10
+ id: 'creatives.components.Sidebar.input.placeholder',
11
+ defaultMessage: 'Search...',
12
+ },
13
+ menuTitle: {
14
+ id: 'creatives.components.Sidebar.menuTitle',
15
+ defaultMessage: 'Menu',
16
+ },
17
+ creatives: {
18
+ id: 'creatives.components.Sidebar.creatives',
19
+ defaultMessage: 'Creatives',
20
+ },
21
+ });
@@ -0,0 +1,63 @@
1
+ .modal-slidebox-wrapper {
2
+ width: 100vw;
3
+ height: 100vh;
4
+ position: fixed;
5
+ top: 0;
6
+ left: 0;
7
+ background: rgba(0,0,0,0.56);
8
+ z-index: 10002;
9
+
10
+ #slidebox-container {
11
+ position: relative;
12
+ left: 40vw;
13
+ width: 60vw;
14
+ height: 100vh;
15
+ background: rgba(255,255,255,1);
16
+ // padding: 0 24px 0 24px;
17
+ overflow-y: auto;
18
+ // font-family: 'proxima-nova';
19
+
20
+ .slidebox-header {
21
+ display: inline-flex;
22
+ width: 100%;
23
+ padding: 16px 24px;
24
+ -webkit-box-shadow: 0px 0px 4px 2px rgba(0,0,0,0.12);
25
+ -moz-box-shadow: 0px 0px 4px 2px rgba(0,0,0,0.12);
26
+ box-shadow: 0px 0px 4px 2px rgba(0,0,0,0.12);
27
+ margin-bottom: 6px;
28
+ height: 56px;
29
+ align-items: center;
30
+ .heading-title {
31
+ font-size: 20px;
32
+ line-height: 24px;
33
+ font-weight: 600;
34
+ width: 97%;
35
+ text-overflow: ellipsis;
36
+ overflow: hidden;
37
+ white-space: nowrap;
38
+
39
+ &:first-letter{
40
+ text-transform: capitalize;
41
+ }
42
+ }
43
+ .close-slidebox{
44
+ cursor: pointer;
45
+ }
46
+ }
47
+
48
+ #slidebox-content {
49
+ padding: 0 0px 0 24px;
50
+ }
51
+ }
52
+ }
53
+
54
+ .show-slidebox {
55
+ visibility: visible;
56
+ opacity: 1;
57
+ transition: visibility 1s linear 0.33s, opacity 0.33s linear;
58
+ }
59
+ .hide-slidebox {
60
+ visibility: hidden;
61
+ opacity: 0;
62
+ transition-delay: 0s;
63
+ }
@@ -0,0 +1,47 @@
1
+ import PropTypes from 'prop-types';
2
+ import React from 'react';
3
+ import './_slideBox.scss';
4
+ class SlideBox extends React.Component { // eslint-disable-line react/prefer-stateless-function
5
+ render() {
6
+ return (
7
+ <div className={this.props.show ? "modal-slidebox-wrapper show-slidebox" : "modal-slidebox-wrapper hide-slidebox"}>
8
+ <div id="slidebox-container" style={{ width: `${this.props.width}vw`, left: `${100 - this.props.width}vw`}}>
9
+ <div className="slidebox-header">
10
+ <div className="heading-title">
11
+ {this.props.header}
12
+ </div>
13
+ <div id="box-actions" style={{ float: 'right' }} onClick={this.props.handleClose}>
14
+ <i className="material-icons close-slidebox">close</i>
15
+ </div>
16
+ </div>
17
+
18
+ <div id="slidebox-content">
19
+ {this.props.isLoading ? <div style={{height: '100%', lineHeight: '90vh', textAlign: 'center', fontSize: '18px', fontFamily: "open-sans"}}>{this.props.loadingText}</div> : this.props.content}
20
+ </div>
21
+ </div>
22
+ </div>
23
+ );
24
+ }
25
+ }
26
+
27
+ SlideBox.defaultProps = {
28
+ show: false,
29
+ width: 40,
30
+ loadingText: 'loading',
31
+ isLoading: false,
32
+ };
33
+
34
+ SlideBox.propTypes = {
35
+ header: PropTypes.oneOfType([
36
+ PropTypes.element,
37
+ PropTypes.string,
38
+ ]).isRequired,
39
+ content: PropTypes.element.isRequired,
40
+ show: PropTypes.bool,
41
+ handleClose: PropTypes.func.isRequired,
42
+ width: PropTypes.number,
43
+ loadingText: PropTypes.string,
44
+ isLoading: PropTypes.bool,
45
+ };
46
+
47
+ export default SlideBox;
@@ -0,0 +1,103 @@
1
+ import React from 'react';
2
+ import {mount, shallow} from 'enzyme';
3
+ import SlideBox from '../index';
4
+
5
+ describe('<SlideBox />', () => {
6
+ let props;
7
+ let mountedSlideBox;
8
+
9
+ const slideBox = () => {
10
+ if (!mountedSlideBox) {
11
+ mountedSlideBox = mount(
12
+ <SlideBox {...props} />
13
+ );
14
+ }
15
+ return mountedSlideBox;
16
+ };
17
+
18
+ beforeEach(() => {
19
+ props = {
20
+ header: <h1>Header</h1>,
21
+ content: <p>Content</p>,
22
+ show: undefined,
23
+ handleClose: jest.fn(),
24
+ };
25
+ mountedSlideBox = undefined;
26
+ });
27
+
28
+ it('always renders a wrapping div', () => {
29
+ const divs = slideBox().find("div");
30
+ expect(divs.length).toBeGreaterThan(0);
31
+ });
32
+
33
+ describe('the rendered div', () => {
34
+ it('contains everything else that gets rendered', () => {
35
+ const divs = slideBox().find("div");
36
+ const wrappingDiv = divs.first();
37
+ expect(wrappingDiv.children()).toEqual({});
38
+ });
39
+
40
+ it('has a className of show-slidebox if "show" props is true', () => {
41
+ props.show = true;
42
+ const divs = slideBox().find("div");
43
+ const wrappingDiv = divs.first();
44
+ expect(wrappingDiv.props().className).toBe('modal-slidebox-wrapper show-slidebox');
45
+ });
46
+
47
+ it('has a className of hide-slidebox if "show" props is false', () => {
48
+ props.show = false;
49
+ const divs = slideBox().find("div");
50
+ const wrappingDiv = divs.first();
51
+ expect(wrappingDiv.props().className).toBe('modal-slidebox-wrapper hide-slidebox');
52
+ });
53
+
54
+ it('should render a div with class heading-title', () => {
55
+ const divs = slideBox().find("div");
56
+ const header = divs.find('.heading-title');
57
+ expect(header.length).toBe(1);
58
+ });
59
+
60
+ it('should render a div with id box-actions', () => {
61
+ const divs = slideBox().find("div");
62
+ const header = divs.find('#box-actions');
63
+ expect(header.length).toBe(1);
64
+ });
65
+ });
66
+
67
+ describe('Slidebox header', () => {
68
+ it('renders the element passed as header prop', () => {
69
+ const renderedComponent = shallow(<SlideBox {...props}/>);
70
+ expect(renderedComponent.find('.heading-title').contains(props.header)).toBe(true);
71
+ });
72
+ });
73
+
74
+ describe('Slidebox Content', () => {
75
+ it('renders the element passed as content prop', () => {
76
+ const renderedComponent = shallow(<SlideBox {...props}/>);
77
+ expect(renderedComponent.find('#slidebox-content').contains(props.content)).toBe(true);
78
+ });
79
+ });
80
+
81
+ describe('when handleClose is defined', () => {
82
+ it('sets onClick action of action box to be same as handleClose ', () => {
83
+ const actionBox = slideBox().find('#box-actions');
84
+ expect(actionBox.props().onClick).toBe(props.handleClose);
85
+ });
86
+ });
87
+
88
+ describe('Box Actions Div', () => {
89
+ it('renders one icon', () => {
90
+ const renderedComponent = shallow(<SlideBox {...props}/>);
91
+ const boxActionDiv = renderedComponent.find('#box-actions').first();
92
+ const icon = boxActionDiv.find('i');
93
+ expect(icon.length).toBe(1);
94
+ });
95
+
96
+ it('has close as the content for rendered icon', () => {
97
+ const renderedComponent = shallow(<SlideBox {...props}/>);
98
+ const boxActionDiv = renderedComponent.find('#box-actions').first();
99
+ const icon = boxActionDiv.find('i');
100
+ expect(icon.props().children).toBe('close');
101
+ });
102
+ });
103
+ });
@@ -0,0 +1,55 @@
1
+ /**
2
+ *
3
+ * SmsEditor
4
+ *
5
+ */
6
+
7
+ import PropTypes from 'prop-types';
8
+
9
+ import React from 'react';
10
+ // import styled from 'styled-components';
11
+ import {TextArea} from 'semantic-ui-react';
12
+
13
+
14
+ class SmsEditor extends React.Component { // eslint-disable-line react/prefer-stateless-function
15
+ constructor(props) {
16
+ super(props);
17
+ if (this.props.content) {
18
+ this.state = {
19
+ content: this.props.content,
20
+ };
21
+ } else {
22
+ this.state = {
23
+ content: '',
24
+ };
25
+ }
26
+ this.onContentChange = this.onContentChange.bind(this);
27
+ }
28
+
29
+ onContentChange(e, data) {
30
+ this.props.onDataChange(data);
31
+ this.setState({
32
+ content: data,
33
+ });
34
+ }
35
+
36
+ render() {
37
+ return (
38
+ <div>
39
+ <TextArea
40
+ autoHeight
41
+ style={{minHeight: 100}}
42
+ value={this.props.content}
43
+ onChange={(e, data) => { this.onContentChange(e, data); }}
44
+ />
45
+ </div>
46
+ );
47
+ }
48
+ }
49
+
50
+ SmsEditor.propTypes = {
51
+ content: PropTypes.string,
52
+ onDataChange: PropTypes.func,
53
+ };
54
+
55
+ export default SmsEditor;