@capillarytech/creatives-library 3.0.35 → 3.1.0

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 (218) hide show
  1. package/assets/noImage.png +0 -0
  2. package/components/BreadCrumbs/messages.js +1 -1
  3. package/components/CapTagList/index.js +3 -3
  4. package/components/CapTagList/messages.js +4 -16
  5. package/components/Ckeditor/messages.js +1 -1
  6. package/components/CustomPopOver/index.js +4 -3
  7. package/components/CustomPopOver/messages.js +1 -5
  8. package/components/DateFilter/index.js +12 -12
  9. package/components/DateFilter/messages.js +0 -40
  10. package/components/DateRange/index.js +4 -5
  11. package/components/DateRange/messages.js +1 -13
  12. package/components/Edmeditor/messages.js +1 -1
  13. package/components/EmailPreview/index.js +4 -4
  14. package/components/EmailPreview/messages.js +2 -18
  15. package/components/Footer/messages.js +1 -1
  16. package/components/FormBuilder/index.js +19 -15
  17. package/components/FormBuilder/messages.js +1 -33
  18. package/components/Header/messages.js +4 -4
  19. package/components/ImagePreview/index.js +1 -1
  20. package/components/ImagePreview/messages.js +1 -5
  21. package/components/PageHeader/messages.js +1 -1
  22. package/components/PreviewSideBar/index.js +2 -2
  23. package/components/PreviewSideBar/messages.js +6 -14
  24. package/components/Sidebar/messages.js +3 -3
  25. package/components/SmsTest/index.js +4 -6
  26. package/components/SmsTest/messages.js +1 -9
  27. package/components/TemplatePreview/WechatRichmediaTemplatePreview/messages.js +3 -3
  28. package/components/TemplatePreview/index.js +10 -11
  29. package/components/TemplatePreview/messages.js +7 -23
  30. package/components/Toastr/messages.js +1 -1
  31. package/components/ToastrMessage/index.js +1 -4
  32. package/components/ToastrMessage/messages.js +1 -5
  33. package/components/TopBar/messages.js +1 -1
  34. package/config/app.js +0 -2
  35. package/containers/Assets/Gallery/messages.js +20 -20
  36. package/containers/Cap/index.js +5 -5
  37. package/containers/Dashboard/index.js +2 -2
  38. package/containers/Dashboard/messages.js +1 -1
  39. package/containers/Ebill/index.js +1 -1
  40. package/containers/Ebill/messages.js +16 -20
  41. package/containers/Email/index.js +24 -24
  42. package/containers/Email/messages.js +59 -107
  43. package/containers/Line/Create/index.js +7 -7
  44. package/containers/Line/Create/messages.js +42 -58
  45. package/containers/Line/Edit/index.js +14 -14
  46. package/containers/Line/Edit/messages.js +38 -58
  47. package/containers/Login/components/LoginForm/index.js +7 -10
  48. package/containers/Login/components/LoginForm/messages.js +3 -15
  49. package/containers/Login/index.js +1 -1
  50. package/containers/Login/messages.js +3 -7
  51. package/containers/MobilePush/Create/index.js +45 -45
  52. package/containers/MobilePush/Create/messages.js +75 -111
  53. package/containers/MobilePush/Edit/index.js +45 -45
  54. package/containers/MobilePush/Edit/messages.js +83 -100
  55. package/containers/NotFoundPage/messages.js +1 -1
  56. package/containers/Sms/Create/index.js +8 -7
  57. package/containers/Sms/Create/messages.js +19 -43
  58. package/containers/Sms/Edit/index.js +4 -4
  59. package/containers/Sms/Edit/messages.js +20 -36
  60. package/containers/TagList/messages.js +1 -1
  61. package/containers/Templates/index.js +19 -20
  62. package/containers/Templates/messages.js +64 -136
  63. package/containers/TestPage/messages.js +1 -1
  64. package/containers/Testv2/index.js +2 -2
  65. package/containers/Testv2/messages.js +1 -9
  66. package/containers/WeChat/MapTemplates/index.js +10 -10
  67. package/containers/WeChat/MapTemplates/messages.js +17 -49
  68. package/containers/WeChat/RichmediaTemplates/Create/messages.js +33 -33
  69. package/containers/WeChat/RichmediaTemplates/Edit/messages.js +1 -1
  70. package/containers/WeChat/RichmediaTemplates/View/index.js +2 -2
  71. package/containers/WeChat/RichmediaTemplates/View/messages.js +1 -9
  72. package/index.js +20 -8
  73. package/package.json +4 -1
  74. package/routes.js +16 -2
  75. package/services/api.js +2 -17
  76. package/services/getSchema.js +4 -1
  77. package/translations/en.json +360 -1396
  78. package/translations/zh.json +381 -1417
  79. package/utils/smsCharCountV2.js +10 -26
  80. package/v2Components/BreadCrumbs/messages.js +1 -1
  81. package/v2Components/CallTaskPreview/messages.js +1 -1
  82. package/v2Components/CapTagList/index.js +5 -6
  83. package/v2Components/CapTagList/messages.js +4 -24
  84. package/v2Components/Ckeditor/index.js +0 -1
  85. package/v2Components/Ckeditor/messages.js +1 -1
  86. package/v2Components/CmsTemplatesComponent/messages.js +2 -2
  87. package/v2Components/CustomPopOver/index.js +2 -4
  88. package/v2Components/CustomPopOver/messages.js +1 -5
  89. package/v2Components/DateFilter/index.js +349 -0
  90. package/v2Components/DateFilter/messages.js +17 -0
  91. package/v2Components/DateFilter/tests/index.test.js +15 -0
  92. package/v2Components/DateRange/index.js +113 -0
  93. package/v2Components/DateRange/messages.js +13 -0
  94. package/v2Components/DateRange/tests/index.test.js +10 -0
  95. package/v2Components/Edmeditor/messages.js +1 -1
  96. package/v2Components/EmailPreview/index.js +2 -2
  97. package/v2Components/EmailPreview/messages.js +3 -11
  98. package/v2Components/EmailPreviewV2/index.js +1 -1
  99. package/v2Components/EmailPreviewV2/messages.js +9 -13
  100. package/v2Components/Footer/messages.js +1 -1
  101. package/v2Components/FormBuilder/_formBuilder.scss +19 -0
  102. package/v2Components/FormBuilder/index.js +58 -27
  103. package/v2Components/FormBuilder/messages.js +1 -49
  104. package/v2Components/Header/index.js +2 -2
  105. package/v2Components/Header/messages.js +4 -4
  106. package/v2Components/ImagePreview/index.js +2 -3
  107. package/v2Components/ImagePreview/messages.js +1 -5
  108. package/v2Components/MobilePushPreviewV2/index.js +5 -2
  109. package/v2Components/MobilePushPreviewV2/messages.js +1 -9
  110. package/v2Components/NavigationBar/messages.js +1 -1
  111. package/v2Components/NewCallTask/messages.js +5 -5
  112. package/v2Components/PageHeader/_pageHeader.scss +22 -0
  113. package/v2Components/PageHeader/index.js +37 -0
  114. package/v2Components/PageHeader/messages.js +13 -0
  115. package/v2Components/PageHeader/tests/index.test.js +10 -0
  116. package/v2Components/PreviewSideBar/messages.js +6 -6
  117. package/v2Components/Sidebar/_sidebar.scss +115 -0
  118. package/v2Components/Sidebar/index.js +208 -0
  119. package/v2Components/Sidebar/messages.js +21 -0
  120. package/v2Components/Sidebar/tests/index.test.js +10 -0
  121. package/v2Components/SmsEditor/index.js +55 -0
  122. package/v2Components/SmsEditor/tests/index.test.js +10 -0
  123. package/v2Components/SmsTest/index.js +4 -6
  124. package/v2Components/SmsTest/messages.js +1 -9
  125. package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/_wechatRichmediaTemplatePrev.scss +2 -0
  126. package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/index.js +18 -28
  127. package/v2Components/TemplatePreview/WechatRichmediaTemplatePreview/messages.js +3 -3
  128. package/v2Components/TemplatePreview/_templatePreview.scss +0 -9
  129. package/v2Components/TemplatePreview/index.js +16 -35
  130. package/v2Components/TemplatePreview/messages.js +7 -23
  131. package/v2Components/Toastr/messages.js +1 -1
  132. package/v2Components/ToastrMessage/index.js +2 -3
  133. package/v2Components/ToastrMessage/messages.js +1 -5
  134. package/v2Components/TopBar/_topbar.scss +46 -0
  135. package/v2Components/TopBar/messages.js +7 -7
  136. package/v2Containers/App/constants.js +0 -11
  137. package/v2Containers/Assets/Gallery/messages.js +24 -24
  138. package/v2Containers/CallTask/messages.js +6 -6
  139. package/v2Containers/Cap/actions.js +0 -1
  140. package/v2Containers/Cap/index.js +9 -6
  141. package/v2Containers/Cap/messsages.js +15 -19
  142. package/v2Containers/Cap/sagas.js +8 -1
  143. package/v2Containers/ChannelTemplates/messages.js +1 -1
  144. package/v2Containers/CreativesContainer/SlideBoxContent.js +39 -1
  145. package/v2Containers/CreativesContainer/SlideBoxFooter.js +7 -1
  146. package/v2Containers/CreativesContainer/SlideBoxHeader.js +21 -3
  147. package/v2Containers/CreativesContainer/index.js +95 -50
  148. package/v2Containers/CreativesContainer/index.scss +15 -0
  149. package/v2Containers/CreativesContainer/messages.js +12 -16
  150. package/v2Containers/Dashboard/index.js +1 -2
  151. package/v2Containers/Dashboard/messages.js +1 -1
  152. package/v2Containers/Ebill/index.js +1 -1
  153. package/v2Containers/Ebill/messages.js +16 -20
  154. package/v2Containers/Email/index.js +20 -20
  155. package/v2Containers/Email/messages.js +61 -101
  156. package/v2Containers/EmailWrapper/index.js +44 -64
  157. package/v2Containers/EmailWrapper/messages.js +12 -12
  158. package/v2Containers/Line/Create/index.js +3 -3
  159. package/v2Containers/Line/Create/messages.js +41 -53
  160. package/v2Containers/Line/Edit/index.js +10 -10
  161. package/v2Containers/Line/Edit/messages.js +39 -55
  162. package/v2Containers/Login/components/LoginForm/index.js +6 -9
  163. package/v2Containers/Login/components/LoginForm/messages.js +3 -15
  164. package/v2Containers/Login/index.js +1 -1
  165. package/v2Containers/Login/messages.js +3 -7
  166. package/v2Containers/MobilePush/Create/_mobilePushCreate.scss +3 -0
  167. package/v2Containers/MobilePush/Create/index.js +33 -33
  168. package/v2Containers/MobilePush/Create/messages.js +81 -109
  169. package/v2Containers/MobilePush/Edit/_mobilePushCreate.scss +3 -0
  170. package/v2Containers/MobilePush/Edit/index.js +22 -22
  171. package/v2Containers/MobilePush/Edit/messages.js +79 -95
  172. package/v2Containers/MobilePush/initialSchema.js +1 -2
  173. package/v2Containers/MobilepushWrapper/messages.js +5 -5
  174. package/v2Containers/NotFoundPage/messages.js +1 -1
  175. package/v2Containers/Sms/Create/index.js +6 -6
  176. package/v2Containers/Sms/Create/messages.js +21 -41
  177. package/v2Containers/Sms/Edit/index.js +6 -6
  178. package/v2Containers/Sms/Edit/messages.js +20 -36
  179. package/v2Containers/TagList/messages.js +1 -1
  180. package/v2Containers/Templates/_templates.scss +31 -5
  181. package/v2Containers/Templates/index.js +243 -248
  182. package/v2Containers/Templates/messages.js +7 -15
  183. package/v2Containers/Templates/sagas.js +0 -1
  184. package/v2Containers/TemplatesV2/_templatesV2.scss +5 -0
  185. package/v2Containers/TemplatesV2/index.js +4 -1
  186. package/v2Containers/TemplatesV2/messages.js +5 -29
  187. package/v2Containers/TestPage/messages.js +1 -1
  188. package/v2Containers/Testv2/index.js +2 -2
  189. package/v2Containers/Testv2/messages.js +1 -9
  190. package/v2Containers/WeChat/MapTemplates/_mapTemplates.scss +16 -0
  191. package/v2Containers/WeChat/MapTemplates/actions.js +4 -2
  192. package/v2Containers/WeChat/MapTemplates/index.js +800 -872
  193. package/v2Containers/WeChat/MapTemplates/initialSchema.js +184 -0
  194. package/v2Containers/WeChat/MapTemplates/messages.js +19 -43
  195. package/v2Containers/WeChat/MapTemplates/sagas.js +6 -2
  196. package/v2Containers/WeChat/MapTemplates/selectors.js +1 -1
  197. package/v2Containers/WeChat/RichmediaTemplates/Create/_createRichmedia.scss +118 -28
  198. package/v2Containers/WeChat/RichmediaTemplates/Create/actions.js +3 -1
  199. package/v2Containers/WeChat/RichmediaTemplates/Create/index.js +262 -306
  200. package/v2Containers/WeChat/RichmediaTemplates/Create/messages.js +43 -95
  201. package/v2Containers/WeChat/RichmediaTemplates/Create/reducer.js +2 -1
  202. package/v2Containers/WeChat/RichmediaTemplates/Create/richmediaschema.js +113 -246
  203. package/v2Containers/WeChat/RichmediaTemplates/Create/sagas.js +5 -2
  204. package/v2Containers/WeChat/RichmediaTemplates/Create/selectors.js +1 -1
  205. package/v2Containers/WeChat/RichmediaTemplates/Edit/actions.js +2 -2
  206. package/v2Containers/WeChat/RichmediaTemplates/Edit/index.js +11 -10
  207. package/v2Containers/WeChat/RichmediaTemplates/Edit/messages.js +1 -1
  208. package/v2Containers/WeChat/RichmediaTemplates/Edit/reducer.js +1 -0
  209. package/v2Containers/WeChat/RichmediaTemplates/Edit/sagas.js +4 -2
  210. package/v2Containers/WeChat/RichmediaTemplates/Edit/selectors.js +1 -1
  211. package/v2Containers/WeChat/RichmediaTemplates/View/messages.js +1 -9
  212. package/v2Containers/WeChat/Wrapper/_wrapper.scss +0 -0
  213. package/v2Containers/WeChat/Wrapper/constants.js +5 -0
  214. package/v2Containers/WeChat/Wrapper/index.js +194 -0
  215. package/v2Containers/WeChat/Wrapper/messages.js +21 -0
  216. package/v2Containers/WeChat/helper.js +12 -0
  217. package/containers/Cap/messages.js +0 -75
  218. package/v2Containers/Cap/messages.js +0 -75
@@ -85,8 +85,8 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
85
85
  <div className="devices">
86
86
  {!isEmpty(templateData) && hasAndroid && hasIos &&
87
87
  <ButtonGroup onClick={this.changeDevice}>
88
- <CapButton type={device === "android" ? "primary" : "secondary"} value={"android"}><FormattedMessage {...messages.android} /></CapButton>
89
- <CapButton type={device === "iphone" ? "primary" : "secondary"} value={"iphone"}><FormattedMessage {...messages.ios} /></CapButton>
88
+ <CapButton type={device === "android" ? "primary" : "secondary"} value={"android"}>Android</CapButton>
89
+ <CapButton type={device === "iphone" ? "primary" : "secondary"} value={"iphone"}>IOS</CapButton>
90
90
  </ButtonGroup>}
91
91
  </div>
92
92
  <TemplatePreview
@@ -109,9 +109,12 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
109
109
  MobilePushPreviewV2.propTypes = {
110
110
  templateData: PropTypes.object.isRequired,
111
111
  channel: PropTypes.string.isRequired,
112
+ showPreview: PropTypes.bool,
112
113
  handleClose: PropTypes.func,
113
114
  onEditClick: PropTypes.func,
114
115
  onDuplicateClick: PropTypes.func,
116
+ location: PropTypes.object,
117
+ embedded: PropTypes.bool,
115
118
  };
116
119
 
117
120
  export default MobilePushPreviewV2;
@@ -7,15 +7,7 @@ import { defineMessages } from 'react-intl';
7
7
 
8
8
  export default defineMessages({
9
9
  header: {
10
- id: 'creatives.componentsv2.MobilePushPreviewV2.header',
10
+ id: 'app.components.MobilePushPreviewV2.header',
11
11
  defaultMessage: 'This is the MobilePushPreviewV2 component !',
12
12
  },
13
- android: {
14
- id: 'creatives.componentsv2.MobilePushPreviewV2.android',
15
- defaultMessage: 'Android',
16
- },
17
- ios: {
18
- id: 'creatives.componentsv2.MobilePushPreviewV2.ios',
19
- defaultMessage: 'IOS',
20
- },
21
13
  });
@@ -6,7 +6,7 @@
6
6
 
7
7
  import { defineMessages } from 'react-intl';
8
8
 
9
- export const scope = 'creatives.componentsV2.NavigationBar';
9
+ export const scope = 'app.components.NavigationBar';
10
10
 
11
11
  export default defineMessages({
12
12
  header: {
@@ -7,23 +7,23 @@ import { defineMessages } from 'react-intl';
7
7
 
8
8
  export default defineMessages({
9
9
  callTaskTitle: {
10
- id: 'creatives.componentsV2.NewCallTask.callTaskTitle',
10
+ id: 'app.components.NewCallTask.callTaskTitle',
11
11
  defaultMessage: 'Call Task title',
12
12
  },
13
13
  messageHeader: {
14
- id: 'creatives.componentsV2.NewCallTask.messageHeader',
14
+ id: 'app.components.NewCallTask.messageHeader',
15
15
  defaultMessage: 'Message',
16
16
  },
17
17
  description: {
18
- id: 'creatives.componentsV2.NewCallTask.description',
18
+ id: 'app.components.NewCallTask.description',
19
19
  defaultMessage: 'Description',
20
20
  },
21
21
  done: {
22
- id: 'creatives.componentsV2.NewCallTask.done',
22
+ id: 'app.components.NewCallTask.done',
23
23
  defaultMessage: 'Done',
24
24
  },
25
25
  personalisationTags: {
26
- id: 'creatives.componentsV2.NewCallTask.personalisationTags',
26
+ id: 'app.components.NewCallTask.personalisationTags',
27
27
  defaultMessage: 'Add Labels',
28
28
  },
29
29
  });
@@ -0,0 +1,22 @@
1
+ .pageHeader{
2
+ .pageHeader-wrapper{
3
+ padding-top: 8px;
4
+ padding-bottom: 8px;
5
+
6
+ .title-container {
7
+ padding-left: 0px !important;
8
+
9
+ .title {
10
+ font-size: 24px;
11
+ line-height: 32px;
12
+ color: #323B4E;
13
+ font-family: 'Proxima-Nova';
14
+ font-weight: 600;
15
+ }
16
+ }
17
+ .action-buttons{
18
+ text-align: right;
19
+ padding-right: 0 !important;
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,37 @@
1
+ import PropTypes from 'prop-types';
2
+ import React from 'react';
3
+ // import styled from 'styled-components';
4
+
5
+ import { Grid } from 'semantic-ui-react';
6
+ import './_pageHeader.scss';
7
+
8
+ // import { FormattedMessage } from 'react-intl';
9
+ // import messages from './messages';
10
+
11
+ class PageHeader extends React.Component { // eslint-disable-line react/prefer-stateless-function
12
+ render() {
13
+ return (
14
+ <Grid className="pageHeader">
15
+ <Grid.Row className="pageHeader-wrapper">
16
+ <Grid.Column width={8} className="title-container">
17
+ <h2 className="title">{this.props.pageHeading}</h2>
18
+ </Grid.Column>
19
+ <Grid.Column className="action-buttons" width={8}>
20
+ {this.props.actionComponents}
21
+ </Grid.Column>
22
+ </Grid.Row>
23
+ </Grid>
24
+ );
25
+ }
26
+ }
27
+
28
+ PageHeader.propTypes = {
29
+ // Need Formatted Message in pageHeading Props
30
+ pageHeading: PropTypes.oneOfType([
31
+ PropTypes.element,
32
+ PropTypes.string,
33
+ ]),
34
+ actionComponents: PropTypes.element,
35
+ };
36
+
37
+ export default PageHeader;
@@ -0,0 +1,13 @@
1
+ /*
2
+ * PageHeader Messages
3
+ *
4
+ * This contains all the text for the PageHeader component.
5
+ */
6
+ import { defineMessages } from 'react-intl';
7
+
8
+ export default defineMessages({
9
+ header: {
10
+ id: 'app.components.PageHeader.header',
11
+ defaultMessage: 'This is the PageHeader component !',
12
+ },
13
+ });
@@ -0,0 +1,10 @@
1
+ // import React from 'react';
2
+ // import { shallow } from 'enzyme';
3
+
4
+ // import PageHeader from '../index';
5
+
6
+ // describe('<PageHeader />', () => {
7
+ // it('Expect to have unit tests specified', () => {
8
+ // expect(true).toEqual(false);
9
+ // });
10
+ // });
@@ -7,27 +7,27 @@ import { defineMessages } from 'react-intl';
7
7
 
8
8
  export default defineMessages({
9
9
  header: {
10
- id: 'creatives.componentsV2.PreviewSideBar.header',
10
+ id: 'app.components.PreviewSideBar.header',
11
11
  defaultMessage: 'This is the PreviewSideBar component !',
12
12
  },
13
13
  lastModified: {
14
- id: 'creatives.componentsV2.PreviewSideBar.lastModified',
14
+ id: 'app.components.PreviewSideBar.lastModified',
15
15
  defaultMessage: 'Last modified on',
16
16
  },
17
17
  uploadedBy: {
18
- id: 'creatives.componentsV2.PreviewSideBar.uploadedBy',
18
+ id: 'app.components.PreviewSideBar.uploadedBy',
19
19
  defaultMessage: 'Last modified by',
20
20
  },
21
21
  edit: {
22
- id: 'creatives.componentsV2.PreviewSideBar.edit',
22
+ id: 'app.components.PreviewSideBar.edit',
23
23
  defaultMessage: 'Edit',
24
24
  },
25
25
  select: {
26
- id: 'creatives.componentsV2.PreviewSideBar.select',
26
+ id: 'app.components.PreviewSideBar.select',
27
27
  defaultMessage: 'Select',
28
28
  },
29
29
  duplicate: {
30
- id: 'creatives.componentsV2.PreviewSideBar.duplicate',
30
+ id: 'app.components.PreviewSideBar.duplicate',
31
31
  defaultMessage: 'Duplicate',
32
32
  },
33
33
  });
@@ -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,208 @@
1
+ import PropTypes from 'prop-types';
2
+ import React from 'react';
3
+ // import styled from 'styled-components';
4
+ import { Accordion, Icon, Input, Button } from 'semantic-ui-react';
5
+ import { FormattedMessage } from 'react-intl';
6
+ import _ from 'lodash';
7
+ import { Link } from 'react-router';
8
+ import messages from './messages';
9
+ import './_sidebar.scss';
10
+
11
+ class Sidebar extends React.Component { // eslint-disable-line react/prefer-stateless-function
12
+ constructor(props) {
13
+ super(props);
14
+ this.state = {
15
+ isOpen: false,
16
+ activeItem: '',
17
+ activeIndex: 0,
18
+ menuItems: this.props.menuData,
19
+ searchText: '',
20
+ visible: true,
21
+ };
22
+ this.handleItemClick = this.handleItemClick.bind(this);
23
+ this.handleTitleClick = this.handleTitleClick.bind(this);
24
+ this.handleSearch = this.handleSearch.bind(this);
25
+ this.toggleSideNav = this.toggleSideNav.bind(this);
26
+ this.getLinkElement = this.getLinkElement.bind(this);
27
+ this.selectActiveLinkFromUrl = this.selectActiveLinkFromUrl.bind(this);
28
+ }
29
+
30
+ componentWillMount() {
31
+ this.selectActiveLinkFromUrl(this.props);
32
+ }
33
+
34
+ componentWillReceiveProps(nextProp) {
35
+ this.selectActiveLinkFromUrl(nextProp);
36
+ this.setState({ menuItems: nextProp.menuData });
37
+ }
38
+
39
+ getAccordian(content, keyValue) {
40
+ return (<Accordion key={keyValue}>{content}</Accordion>);
41
+ }
42
+
43
+ getAccordionTitle(title) {
44
+ return (<Accordion.Title>
45
+ <div className="header item">
46
+ <Icon name="dropdown" /> {title}
47
+ </div>
48
+ </Accordion.Title>);
49
+ }
50
+
51
+ getAccordionContent(links, keyValue) {
52
+ return (<Accordion.Content key={keyValue}>{links}</Accordion.Content>);
53
+ }
54
+
55
+ getLinkElement(to, text, value, isExternal) {
56
+ const selectedItem = (value && value.trim().toLowerCase() === this.state.activeItem) ? 'selected' : '';
57
+ if (text.toLowerCase().includes(this.state.searchText.toLowerCase())) {
58
+ if (isExternal) {
59
+ return ((text.toLowerCase().includes(this.state.searchText.toLowerCase())) ? <a key={to} className={`item menu-item ${selectedItem}`} href={to}>{text}</a> : '');
60
+ }
61
+ return (
62
+ (text.toLowerCase().includes(this.state.searchText.toLowerCase())) ?
63
+ <Link to={to} className={`item menu-item ${selectedItem}`} onClick={this.handleItemClick} key={to} title={text}>{text}</Link>
64
+ : ''
65
+ );
66
+ }
67
+ return '';
68
+ }
69
+
70
+ selectActiveLinkFromUrl(props) {
71
+ const activeRoute = props.router.routes[props.router.routes.length - 1];
72
+ const activeRouteName = (activeRoute.name && activeRoute.name.trim().toLowerCase()) || '';
73
+ let selectedItem = '';
74
+ let selectedIndex = -1;
75
+ _.forEach(props.menuData, (menuItem, menuIndex) => {
76
+ if (menuItem.items && typeof menuItem.items === 'object') {
77
+ _.forEach(menuItem.items, (menuData) => {
78
+ // console.log('Menua Data ', menuData, activeRouteName, menuItem);
79
+ if ((menuItem.id && menuData.id.toLowerCase() === activeRouteName.toLowerCase()) || (menuData.value.toLowerCase() === activeRouteName.toLowerCase())) {
80
+ selectedIndex = menuIndex;
81
+ selectedItem = activeRouteName.toLowerCase();
82
+ } else if (activeRouteName === 'assets') {
83
+ selectedIndex = menuIndex;
84
+ selectedItem = 'gallery';
85
+ }
86
+ });
87
+ } else if (menuItem.value.toLowerCase() === activeRouteName.toLowerCase()) {
88
+ selectedIndex = menuIndex;
89
+ selectedItem = activeRouteName.toLowerCase();
90
+ }
91
+ });
92
+ this.setState({ activeIndex: selectedIndex, activeItem: selectedItem });
93
+ }
94
+
95
+ toggleSideNav(e) {
96
+ e.preventDefault();
97
+ this.setState({ visible: !this.state.visible }, () => {
98
+ window.dispatchEvent(new Event('resize'));
99
+ if (!this.state.visible) {
100
+ document.getElementById('cap-sidebar').classList.add('sidebar-collapse');
101
+ } else {
102
+ document.getElementById('cap-sidebar').classList.remove('sidebar-collapse');
103
+ }
104
+ });
105
+ }
106
+
107
+ createAccordianElements(title, contentItems) {
108
+ const accordian = [];
109
+ accordian.push(this.getAccordionTitle(title));
110
+ const contentLink = contentItems.map((key) =>
111
+ this.getLinkElement(key.link, key.text, key.value, key.external),
112
+ );
113
+ accordian.push(this.getAccordionContent(contentLink));
114
+ return accordian;
115
+ }
116
+
117
+ createNavigationElement(menuItems) {
118
+ const navArray = [];
119
+ _.forEach(menuItems, (key, index) => {
120
+ const headerTitle = key.group;
121
+ const isCategory = Object.prototype.hasOwnProperty.call(key, 'categories');
122
+ if (isCategory) { // attach nested Accordion
123
+ const accordian = [];
124
+ const nestedAcordian = [];
125
+ accordian.push(this.getAccordionTitle(headerTitle));
126
+ const contentAccordian = this.getAccordian(this.createNavigationElement(key.categories), `nestedAccordian-${index}`);
127
+ nestedAcordian.push(contentAccordian);
128
+ const content = this.getAccordionContent(nestedAcordian, `content-${index}`);
129
+ accordian.push(content);
130
+ navArray.push(accordian);
131
+ } else { // attach items to existing accordian
132
+ const accordianElem = this.createAccordianElements(headerTitle, key.items);
133
+ navArray.push(accordianElem);
134
+ }
135
+ });
136
+ // const selectedItem = (this.state.activeItem === 'gallery') ? 'selected' : '';
137
+ // navArray.push(
138
+ // <Link
139
+ // to={'/assets'}
140
+ // className={`item menu-item ${selectedItem} assetItem`}
141
+ // key={'assets'}
142
+ // title={'Gallery'}
143
+ // onClick={(e) => this.handleItemClick(e)}
144
+ // >Gallery</Link>
145
+ // );
146
+ return navArray;
147
+ }
148
+
149
+ handleOpen() {
150
+ this.setState({ isOpen: true });
151
+ }
152
+
153
+ handleClose() {
154
+ this.setState({ isOpen: false });
155
+ }
156
+
157
+ handleItemClick(e) {
158
+ this.setState({ activeItem: (e.target.text && e.target.text.trim().toLowerCase()) || '' });
159
+ }
160
+
161
+ handleTitleClick(e, i) {
162
+ this.setState({ activeIndex: this.state.activeIndex === i ? -1 : i });
163
+ }
164
+
165
+ handleSearch(e) {
166
+ this.setState({ searchText: e.target.value });
167
+ }
168
+
169
+
170
+ render() {
171
+ const visible = this.state.visible;
172
+ const push = !visible ? 'push' : '';
173
+ const collapse = !visible ? 'collapse' : '';
174
+ const toggle = visible ? 'hide' : '';
175
+
176
+ // const types = [{ text: 'Creatives', value: 'Creatives' }];
177
+ return (
178
+ <div className="sidebar-container">
179
+ <div className={`sidebar sidebar-width ${collapse}`}>
180
+ <div className="searchbar">
181
+ <FormattedMessage {...messages.inputPlaceholder}>{(message) => <Input icon="search" className="sidebar-search" placeholder={message} fluid onChange={this.handleSearch} />}</FormattedMessage>
182
+ <a href="" onClick={this.toggleSideNav}><i className="material-icons control-arrow">arrow_back</i></a>
183
+ </div>
184
+
185
+ <div className="menu-header">
186
+ <span className="menu-title"><FormattedMessage {...messages.menuTitle} /> </span>
187
+ {this.props.actionComponents}
188
+ </div>
189
+ <Accordion className="sidebar-accordian" activeIndex={this.state.activeIndex} onTitleClick={this.handleTitleClick}>
190
+ {this.props.menuData && this.createNavigationElement(this.props.menuData)}
191
+ </Accordion>
192
+ </div>
193
+ <div className={`togglebar ${toggle} ${push}`}>
194
+ <Button icon className="btn-toggle" onClick={this.toggleSideNav}>
195
+ <Icon name="bars" />
196
+ </Button>
197
+ </div>
198
+ </div>
199
+ );
200
+ }
201
+ }
202
+
203
+ Sidebar.propTypes = {
204
+ menuData: PropTypes.array.isRequired,
205
+ actionComponents: PropTypes.oneOfType([PropTypes.element, PropTypes.string]),
206
+ };
207
+
208
+ export default 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: 'app.components.Sidebar.input.placeholder',
11
+ defaultMessage: 'Search...',
12
+ },
13
+ menuTitle: {
14
+ id: 'app.components.Sidebar.menuTitle',
15
+ defaultMessage: 'Menu',
16
+ },
17
+ creatives: {
18
+ id: 'app.components.Sidebar.creatives',
19
+ defaultMessage: 'Creatives',
20
+ },
21
+ });
@@ -0,0 +1,10 @@
1
+ // import React from 'react';
2
+ // import { shallow } from 'enzyme';
3
+
4
+ // import Sidebar from '../index';
5
+
6
+ // describe('<Sidebar />', () => {
7
+ // it('Expect to have unit tests specified', () => {
8
+ // expect(true).toEqual(false);
9
+ // });
10
+ // });
@@ -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;
@@ -0,0 +1,10 @@
1
+ // import React from 'react';
2
+ // import { shallow } from 'enzyme';
3
+
4
+ // import SmsEditor from '../index';
5
+
6
+ // describe('<SmsEditor />', () => {
7
+ // it('Expect to have unit tests specified', () => {
8
+ // expect(true).toEqual(false);
9
+ // });
10
+ // });
@@ -9,8 +9,6 @@ import React from 'react';
9
9
 
10
10
  // import { FormattedMessage } from 'react-intl';
11
11
  // import messages from './messages';
12
- import { injectIntl, intlShape } from 'react-intl';
13
- import messages from './messages';
14
12
  import FormBuilder from '../FormBuilder';
15
13
 
16
14
  class SmsTest extends React.Component { // eslint-disable-line react/prefer-stateless-function
@@ -48,7 +46,7 @@ class SmsTest extends React.Component { // eslint-disable-line react/prefer-stat
48
46
  metaType: "text",
49
47
  datatype: "string",
50
48
  required: true,
51
- placeholder: this.props.intl.formatMessage(messages.inputTemplateName),
49
+ placeholder: "Please input template name.",
52
50
  fluid: true,
53
51
  styling: "semantic",
54
52
  order: 1,
@@ -64,7 +62,7 @@ class SmsTest extends React.Component { // eslint-disable-line react/prefer-stat
64
62
  metaType: "text",
65
63
  datatype: "string",
66
64
  required: true,
67
- placeholder: this.props.intl.formatMessage(messages.inputSmsTemplate),
65
+ placeholder: "Please input sms template content.",
68
66
  fluid: false,
69
67
  styling: "custom",
70
68
  order: 2,
@@ -111,7 +109,7 @@ class SmsTest extends React.Component { // eslint-disable-line react/prefer-stat
111
109
  }
112
110
 
113
111
  SmsTest.propTypes = {
114
- intl: intlShape.isRequired,
112
+
115
113
  };
116
114
 
117
- export default injectIntl(SmsTest);
115
+ export default SmsTest;
@@ -7,15 +7,7 @@ import { defineMessages } from 'react-intl';
7
7
 
8
8
  export default defineMessages({
9
9
  header: {
10
- id: 'creatives.componentsV2.SmsTest.header',
10
+ id: 'app.components.SmsTest.header',
11
11
  defaultMessage: 'This is the SmsTest component !',
12
12
  },
13
- inputTemplateName: {
14
- id: 'creatives.componentsV2.SmsTest.inputTemplateName',
15
- defaultMessage: 'Please input template name.',
16
- },
17
- inputSmsTemplate: {
18
- id: 'creatives.componentsV2.SmsTest.inputSmsTemplate',
19
- defaultMessage: 'Please input sms template content.',
20
- },
21
13
  });