@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
@@ -1,67 +1,63 @@
1
1
  import { defineMessages } from 'react-intl';
2
2
  export default defineMessages({
3
3
  "sms": {
4
- id: 'reon.componentsv2.Cap.sms',
4
+ id: 'reon.components.Cap.sms',
5
5
  defaultMessage: 'SMS',
6
6
  },
7
7
  "wechat": {
8
- id: 'reon.componentsv2.Cap.wechat',
8
+ id: 'reon.components.Cap.wechat',
9
9
  defaultMessage: 'WeChat',
10
10
  },
11
11
  "gallery": {
12
- id: 'reon.componentsv2.Cap.gallery',
12
+ id: 'reon.components.Cap.gallery',
13
13
  defaultMessage: 'Gallery',
14
14
  },
15
15
  "creativesDashboard": {
16
- id: 'reon.componentsv2.Cap.creativesDashboard',
16
+ id: 'reon.components.Cap.creativesDashboard',
17
17
  defaultMessage: 'Creatives',
18
18
  },
19
19
  "creatives": {
20
- id: 'reon.componentsv2.Cap.creatives',
20
+ id: 'reon.components.Cap.creatives',
21
21
  defaultMessage: 'Creatives',
22
22
  },
23
23
  "campaigns": {
24
- id: 'reon.componentsv2.Cap.campaigns',
24
+ id: 'reon.components.Cap.campaigns',
25
25
  defaultMessage: 'Campaigns',
26
26
  },
27
27
  "loyalty": {
28
- id: 'reon.componentsv2.Cap.loyalty',
28
+ id: 'reon.components.Cap.loyalty',
29
29
  defaultMessage: 'Loyalty',
30
30
  },
31
31
  "member care": {
32
- id: 'reon.componentsv2.Cap.memberCare',
32
+ id: 'reon.components.Cap.memberCare',
33
33
  defaultMessage: 'Member Care',
34
34
  },
35
35
  "workbench": {
36
- id: 'reon.componentsv2.Cap.Workbench',
36
+ id: 'reon.components.Cap.Workbench',
37
37
  defaultMessage: 'WorkBench',
38
38
  },
39
39
  "store care": {
40
- id: 'reon.componentsv2.Cap.storeCare',
40
+ id: 'reon.components.Cap.storeCare',
41
41
  defaultMessage: 'Store Care',
42
42
  },
43
43
  "store performance": {
44
- id: 'reon.componentsv2.Cap.storePerformance',
44
+ id: 'reon.components.Cap.storePerformance',
45
45
  defaultMessage: 'Store Performance',
46
46
  },
47
47
  "email": {
48
- id: 'reon.componentsv2.Cap.email',
48
+ id: 'reon.components.Cap.email',
49
49
  defaultMessage: 'Email',
50
50
  },
51
51
  "ebill": {
52
- id: 'reon.componentsv2.Cap.ebill',
52
+ id: 'reon.components.Cap.ebill',
53
53
  defaultMessage: 'Ebill',
54
54
  },
55
55
  "campaignsDashboard": {
56
- id: 'reon.componentsv2.campaignsDashboard',
56
+ id: 'reon.components.campaignsDashboard',
57
57
  defaultMessage: 'Campaigns',
58
58
  },
59
59
  "campaignsHome": {
60
- id: 'reon.componentsv2.campaignsHome',
60
+ id: 'reon.components.campaignsHome',
61
61
  defaultMessage: "Campaigns Home",
62
62
  },
63
- "appName": {
64
- id: 'reon.componentsv2.appName',
65
- defaultMessage: "App Name",
66
- },
67
63
  });
@@ -6,7 +6,6 @@ import * as LocalStorage from '../../services/localStorageApi';
6
6
  import * as types from './constants';
7
7
  import config from '../../config/app';
8
8
  import pathConfig from '../../config/path';
9
- import { getTopbarMenuDataValue } from '../../v2Containers/App/constants';
10
9
  // import {makeSelectOrgId} from './selectors';
11
10
 
12
11
  function* authorize(user) {
@@ -158,3 +157,11 @@ export default [
158
157
  watchGetTopbarMenuData,
159
158
  ];
160
159
 
160
+ function getTopbarMenuDataValue() {
161
+ return [
162
+ { label: 'Campaigns', link: '/campaigns/ui/list', key: 'campaigns' },
163
+ { label: 'Audience', link: '/audience-manager/list', key: 'audience' },
164
+ { label: 'Incentive', link: '/coupons/ui/', key: 'incentive' },
165
+ { label: 'Creatives', link: '/creatives/ui/v2', key: 'creatives' },
166
+ ];
167
+ }
@@ -7,7 +7,7 @@ import { defineMessages } from 'react-intl';
7
7
 
8
8
  export default defineMessages({
9
9
  header: {
10
- id: 'creatives.containersV2.ChannelTemplates.header',
10
+ id: 'app.containers.ChannelTemplates.header',
11
11
  defaultMessage: 'This is ChannelTemplates container !',
12
12
  },
13
13
  });
@@ -11,6 +11,8 @@ import EmailWrapper from '../EmailWrapper';
11
11
  import MobilepushWrapper from '../MobilepushWrapper';
12
12
  import EmailPreviewV2 from '../../v2Components/EmailPreviewV2';
13
13
  import MobilePushPreview from '../../v2Components/MobilePushPreviewV2';
14
+ import WechatWrapper from '../WeChat/Wrapper';
15
+ import { RICH_MEDIA, MAP_TEMPLATE, CREATE } from '../WeChat/Wrapper/constants';
14
16
  import CallTask from '../CallTask';
15
17
  import MobliPushEdit from '../MobilePush/Edit';
16
18
  import * as constants from './constants';
@@ -21,6 +23,13 @@ const CreativesWrapper = styled.div`
21
23
  z-index: 10003;
22
24
  }
23
25
  `;
26
+
27
+ function getWechatTemplateType(mode, templateData, weChatTemplateType = '') {
28
+ if (mode !== CREATE) {
29
+ return get(templateData, 'definition.msgcontent', '') === "RICH_MEDIA_WECHAT" ? RICH_MEDIA : MAP_TEMPLATE;
30
+ }
31
+ return weChatTemplateType;
32
+ }
24
33
  function SlideBoxContent(props) {
25
34
  const {
26
35
  slidBoxContent,
@@ -51,9 +60,14 @@ function SlideBoxContent(props) {
51
60
  onValidationFail,
52
61
  channelsToHide,
53
62
  forwardedTags,
63
+ weChatTemplateType,
64
+ onWechatTemplateChange,
65
+ selectedWeChatAccount,
66
+ weChatMaptemplateStep,
67
+ onWeChatMaptemplateStepChange,
54
68
  } = props;
55
69
  const type = messageDetails.type.toLowerCase(); // type is context in get tags values : outbound | dvs | referral | loyalty | coupons
56
- const query = { type: !isFullMode && 'embedded', module: isFullMode ? 'defualt' : 'library'};
70
+ const query = { type: !isFullMode && 'embedded', module: isFullMode ? 'default' : 'library'};
57
71
  const creativesLocationProps = {
58
72
  pathname: `/sms/edit`,
59
73
  query,
@@ -126,6 +140,27 @@ function SlideBoxContent(props) {
126
140
  forwardedTags={forwardedTags}
127
141
  />
128
142
  )}
143
+ {isMpushPreview &&
144
+ <MobilePushPreview templateData={templateData} channel={channel}/>
145
+ }
146
+ {
147
+ (currentChannel === constants.WECHAT && !!slidBoxContent) && <WechatWrapper
148
+ mode={slidBoxContent}
149
+ templateData={templateData}
150
+ templateType={getWechatTemplateType(slidBoxContent, templateData, weChatTemplateType)}
151
+ onWechatTemplateChange={onWechatTemplateChange}
152
+ templateStep={templateStep}
153
+ query={query}
154
+ selectedWeChatAccount={selectedWeChatAccount}
155
+ isGetFormData={isGetFormData}
156
+ getFormData={getFormData}
157
+ isFullMode={isFullMode}
158
+ onValidationFail={onValidationFail}
159
+ onWeChatMaptemplateStepChange={onWeChatMaptemplateStepChange}
160
+ weChatMaptemplateStep={weChatMaptemplateStep}
161
+ forwardedTags={forwardedTags}
162
+ />
163
+ }
129
164
  {isEditSms && (
130
165
  <SmsEdit
131
166
  setIsLoadingContent={setIsLoadingContent}
@@ -287,5 +322,8 @@ SlideBoxContent.propTypes = {
287
322
  onValidationFail: PropTypes.func,
288
323
  channelsToHide: PropTypes.array,
289
324
  forwardedTags: PropTypes.object,
325
+ weChatTemplateType: PropTypes.string,
326
+ onWechatTemplateChange: PropTypes.func,
327
+ selectedWeChatAccount: PropTypes.object,
290
328
  };
291
329
  export default SlideBoxContent;
@@ -3,6 +3,12 @@ import { FormattedMessage } from 'react-intl';
3
3
  import { CapButton } from '@capillarytech/cap-ui-library';
4
4
  import PropTypes from 'prop-types';
5
5
  import messages from './messages';
6
+ function getFullModeSaveBtn(slidBoxContent) {
7
+ return slidBoxContent === "editTemplate" ?
8
+ <FormattedMessage {...messages.creativesTemplatesUpdate}/>
9
+ :
10
+ <FormattedMessage {...messages.creativesTemplatesSaveFullMode}/>;
11
+ }
6
12
  function SlideBoxFooter(props) {
7
13
  const { slidBoxContent, onSave, onEditTemplate, onCreateNextStep, isFullMode} = props;
8
14
  return (
@@ -12,7 +18,7 @@ function SlideBoxFooter(props) {
12
18
  <div>
13
19
  <CapButton onClick={onSave}>
14
20
  {isFullMode ?
15
- <FormattedMessage {...messages.creativesTemplatesSaveFullMode}/>
21
+ getFullModeSaveBtn(slidBoxContent)
16
22
  :
17
23
  <FormattedMessage {...messages.creativesTemplatesSave} />
18
24
  }
@@ -1,10 +1,11 @@
1
1
  import React from 'react';
2
2
  import styled from 'styled-components';
3
3
  import { FormattedMessage } from 'react-intl';
4
- import { CapHeader, CapIcons, CapLabel } from '@capillarytech/cap-ui-library';
4
+ import { CapHeader, CapIcons, CapLabel, CapSteps } from '@capillarytech/cap-ui-library';
5
5
  import moment from 'moment';
6
6
  import PropTypes from 'prop-types';
7
7
  import messages from './messages';
8
+ import { MAP_TEMPLATE } from '../WeChat/Wrapper/constants';
8
9
  const PrefixWrapper = styled.div`
9
10
  margin-right: 16px;
10
11
  `;
@@ -13,11 +14,12 @@ function getChannelLabel(channel) {
13
14
  sms: 'SMS',
14
15
  email: 'Email',
15
16
  mobilepush: 'Push notification',
17
+ wechat: 'Wechat',
16
18
  };
17
19
  return labels[channel.toLowerCase()];
18
20
  }
19
21
  function SlideBoxHeader(props) {
20
- const { slidBoxContent, templateData, onShowTemplates, creativesMode, isFullMode, showPrefix, shouldShowTemplateName, channel, templateNameRenderProp } = props;
22
+ const { slidBoxContent, templateData, onShowTemplates, creativesMode, isFullMode, showPrefix, shouldShowTemplateName, channel, templateNameRenderProp, weChatTemplateType, onWeChatMaptemplateStepChange, weChatMaptemplateStep, templateStep } = props;
21
23
  const showTemplateNameHeader = isFullMode && shouldShowTemplateName;
22
24
  return (
23
25
  <div key="creatives-container-slidebox-header-content">
@@ -53,7 +55,7 @@ function SlideBoxHeader(props) {
53
55
  }
54
56
  />
55
57
  )}
56
- {!showTemplateNameHeader && slidBoxContent === 'createTemplate' && (
58
+ {!showTemplateNameHeader && slidBoxContent === 'createTemplate' && ( templateStep === 'modeSelection' || templateStep === "createTemplateContent" ) && (
57
59
  <CapHeader
58
60
  title={<FormattedMessage {...messages.createMessageContent} values={{channel: getChannelLabel(channel)}}/>}
59
61
  prefix={!isFullMode && showPrefix &&
@@ -63,6 +65,22 @@ function SlideBoxHeader(props) {
63
65
  }
64
66
  />
65
67
  )}
68
+ {!showTemplateNameHeader && slidBoxContent === 'createTemplate' && weChatTemplateType === MAP_TEMPLATE && templateStep !== 'modeSelection' && (
69
+ <CapSteps
70
+ onChange={onWeChatMaptemplateStepChange}
71
+ current={weChatMaptemplateStep}
72
+ size="small"
73
+ className="wechat-steps"
74
+ >
75
+ <CapSteps.CapStep
76
+ title={<CapLabel type="label8">Select template</CapLabel>}
77
+ />
78
+ <CapSteps.CapStep
79
+ title={<CapLabel type="label8">Add content</CapLabel>}
80
+ disabled
81
+ />
82
+ </CapSteps>
83
+ )}
66
84
  </div>
67
85
  );
68
86
  }
@@ -43,10 +43,12 @@ class Creatives extends React.Component {
43
43
  isLoadingContent: true,
44
44
  templateStep: 1, //modeSelection: for template name and (for email selecting upload or editor), and createTemplate to create template create based on modeSelection
45
45
  showSlideBox: true,
46
- slidBoxContent: this.getSlideBocContent({mode: props.creativesMode, templateData: props.templateData, isFullMode: props.isFullMode}),
46
+ slidBoxContent: this.getSlideBoxContent({mode: props.creativesMode, templateData: props.templateData, isFullMode: props.isFullMode}),
47
47
  templateData: this.getTemplateData(props.templateData),
48
48
  templateNameExists: props.creativesMode === 'edit', // if edit mode templateNameExists will be true, and false in create flow.
49
49
  currentChannel: this.props.channel || 'sms',
50
+ weChatTemplateType: '',
51
+ weChatMaptemplateStep: 0,
50
52
  };
51
53
  this.creativesTemplateSteps = {
52
54
  1: 'modeSelection',
@@ -55,10 +57,10 @@ class Creatives extends React.Component {
55
57
  };
56
58
  }
57
59
  componentWillUnmount() {
58
- if (!this.props.isFullMode) {
60
+ if (get(this.props, 'location.query.type', '') === "embedded") {
59
61
  this.props.templateActions.resetTemplateStoreData();
60
- this.props.globalActions.clearMetaEntities();
61
62
  }
63
+ this.props.globalActions.clearMetaEntities();
62
64
  }
63
65
 
64
66
  onEnterTemplateName = () => {
@@ -97,7 +99,7 @@ class Creatives extends React.Component {
97
99
  this.setState((prevState) => {
98
100
  let templateStep = prevState.templateStep + 1;
99
101
  const {emailCreateMode, currentChannel} = prevState;
100
- if ((currentChannel.toUpperCase() === constants.EMAIL && emailCreateMode === "upload") || currentChannel.toUpperCase() === constants.MOBILE_PUSH) {
102
+ if ((currentChannel.toUpperCase() === constants.EMAIL && emailCreateMode === "upload") || currentChannel.toUpperCase() === constants.MOBILE_PUSH || currentChannel.toUpperCase() === constants.WECHAT) {
101
103
  templateStep = prevState.templateStep + 2;
102
104
  }
103
105
 
@@ -113,6 +115,13 @@ class Creatives extends React.Component {
113
115
  onMobilepushModeChange = (mode) => {
114
116
  this.setState({ mobilePushCreateMode: mode});
115
117
  }
118
+ onWechatTemplateChange = (templateType) => {
119
+ this.setState( { weChatTemplateType: templateType});
120
+ }
121
+
122
+ onWeChatMaptemplateStepChange = (step) => {
123
+ this.setState({weChatMaptemplateStep: step});
124
+ }
116
125
 
117
126
  onCallTaskSubmit = (data) => {
118
127
  this.props.getCreativesData({
@@ -185,50 +194,67 @@ class Creatives extends React.Component {
185
194
 
186
195
  getCreativesData = (channel, template) => { //from creatives to consumers
187
196
  let templateData = {channel };
188
- if (channel === constants.SMS && template.value.base) {
189
- templateData.messageBody = template.value.base['sms-editor'];
190
- } else if (channel === constants.EMAIL && template.value.base) {
191
- const emailBase = template.value.base;
192
- templateData = {...templateData, ...emailBase, emailBody: emailBase.html_content, emailSubject: emailBase.subject};
193
- delete templateData.html_content;
194
- delete templateData.subject;
195
- } else if (channel === constants.MOBILE_PUSH && get(template, "value.versions.base")) {
196
- const mobilpushTemplate = template.value;
197
- templateData.accountId = get(mobilpushTemplate, 'definition.accountId');
198
- const androidContent = get(mobilpushTemplate, 'versions.base.ANDROID');
199
- if (!isEmpty(androidContent)) {
200
- delete androidContent.cuid;
201
- delete androidContent.luid;
202
- delete androidContent.communicationId;
203
- const custom = {};
204
- forEach(androidContent.custom, (customKeyValue) => {
205
- custom[customKeyValue.key] = customKeyValue.value;
206
- } );
207
- androidContent.custom = custom;
208
- templateData.androidContent = androidContent;
209
- templateData.androidContent.type = get(mobilpushTemplate, 'definition.mode').toUpperCase();
210
- templateData.androidContent.deviceType = 'ANDROID';
211
- }
212
- const iosContent = get(mobilpushTemplate, 'versions.base.IOS');
213
- if (!isEmpty(iosContent)) {
214
- delete iosContent.cuid;
215
- delete iosContent.luid;
216
- delete iosContent.communicationId;
217
- const custom = {};
218
- forEach(iosContent.custom, (customKeyValue) => {
219
- custom[customKeyValue.key] = customKeyValue.value;
220
- } );
221
- iosContent.custom = custom;
222
- templateData.iosContent = iosContent;
223
- templateData.iosContent.type = get(mobilpushTemplate, 'definition.mode').toUpperCase();
224
- templateData.iosContent.deviceType = 'IOS';
225
- }
226
- templateData.messageSubject = mobilpushTemplate.name ? mobilpushTemplate.name : "messageSubject";
197
+ switch (channel) {
198
+ case constants.SMS:
199
+ if (template.value.base) {
200
+ templateData.messageBody = template.value.base['sms-editor'];
201
+ }
202
+ break;
203
+ case constants.EMAIL:
204
+ if (template.value.base) {
205
+ const emailBase = template.value.base;
206
+ templateData = {...templateData, ...emailBase, emailBody: emailBase.html_content, emailSubject: emailBase.subject};
207
+ delete templateData.html_content;
208
+ delete templateData.subject;
209
+ }
210
+ break;
211
+ case constants.MOBILE_PUSH:
212
+ if (get(template, "value.versions.base")) {
213
+ const mobilpushTemplate = template.value;
214
+ templateData.accountId = get(mobilpushTemplate, 'definition.accountId');
215
+ const androidContent = get(mobilpushTemplate, 'versions.base.ANDROID');
216
+ if (!isEmpty(androidContent)) {
217
+ delete androidContent.cuid;
218
+ delete androidContent.luid;
219
+ delete androidContent.communicationId;
220
+ const custom = {};
221
+ forEach(androidContent.custom, (customKeyValue) => {
222
+ custom[customKeyValue.key] = customKeyValue.value;
223
+ } );
224
+ androidContent.custom = custom;
225
+ templateData.androidContent = androidContent;
226
+ templateData.androidContent.type = get(mobilpushTemplate, 'definition.mode').toUpperCase();
227
+ templateData.androidContent.deviceType = 'ANDROID';
228
+ }
229
+ const iosContent = get(mobilpushTemplate, 'versions.base.IOS');
230
+ if (!isEmpty(iosContent)) {
231
+ delete iosContent.cuid;
232
+ delete iosContent.luid;
233
+ delete iosContent.communicationId;
234
+ const custom = {};
235
+ forEach(iosContent.custom, (customKeyValue) => {
236
+ custom[customKeyValue.key] = customKeyValue.value;
237
+ } );
238
+ iosContent.custom = custom;
239
+ templateData.iosContent = iosContent;
240
+ templateData.iosContent.type = get(mobilpushTemplate, 'definition.mode').toUpperCase();
241
+ templateData.iosContent.deviceType = 'IOS';
242
+ }
243
+ templateData.messageSubject = mobilpushTemplate.name ? mobilpushTemplate.name : "messageSubject";
244
+ }
245
+ break;
246
+ case constants.WECHAT:
247
+ if (template.value) {
248
+ const { accountId, previewContent, ...messageBody } = template.value;
249
+ templateData = { channel, accountId, messageBody: JSON.stringify(messageBody), previewContent};
250
+ }
251
+ break;
252
+ default:
253
+ break;
227
254
  }
228
255
  return templateData;
229
256
  };
230
-
231
- getSlideBocContent({mode, templateData, isFullMode}) {
257
+ getSlideBoxContent({mode, templateData, isFullMode}) {
232
258
  let creativesMode = isFullMode ? 'createTemplate' : 'templates';// for library mode templates page is initial mode and for full mode createTemplates
233
259
  if (mode === 'create' && isFullMode) {
234
260
  creativesMode = 'createTemplate';
@@ -243,6 +269,7 @@ class Creatives extends React.Component {
243
269
  }
244
270
 
245
271
  getFormData = (template) => {
272
+ console.log("Inside getFormData", template);
246
273
  if (template.validity) {
247
274
  this.setState(
248
275
  {
@@ -288,7 +315,7 @@ class Creatives extends React.Component {
288
315
  }
289
316
  shouldShowFooter = () => {
290
317
  const {isFullMode } = this.props;
291
- const {slidBoxContent, currentChannel, emailCreateMode, templateNameExists, templateStep, mobilePushCreateMode} = this.state;
318
+ const {slidBoxContent, currentChannel, emailCreateMode, templateNameExists, templateStep, mobilePushCreateMode, weChatTemplateType} = this.state;
292
319
  const channel = currentChannel.toUpperCase();
293
320
  const currentStep = this.creativesTemplateSteps[templateStep];
294
321
  let showFooter = false;
@@ -322,6 +349,12 @@ class Creatives extends React.Component {
322
349
  showFooter = true;
323
350
  }
324
351
 
352
+ if (channel === constants.WECHAT &&
353
+ ((slidBoxContent === 'createTemplate' && !isEmpty(weChatTemplateType))
354
+ || (slidBoxContent === 'editTemplate' && currentStep === 'modeSelection'))) {
355
+ showFooter = true;
356
+ }
357
+
325
358
 
326
359
  if (showFooter) {
327
360
  if (slidBoxContent === "createTemplate" && ((channel === constants.EMAIL && currentStep === 'createTemplateContent') || (channel === constants.SMS && currentStep === 'modeSelection'))) {
@@ -340,7 +373,7 @@ class Creatives extends React.Component {
340
373
  if (channel === constants.EMAIL || channel === constants.SMS) {
341
374
  const isEmailCreate = slidBoxContent === 'createTemplate' && currentChannel.toUpperCase() === constants.EMAIL && currentStep !== 'createTemplateContent';
342
375
  showDone = (slidBoxContent === 'editTemplate' || slidBoxContent === 'createTemplate') && !isEmailCreate;
343
- } else if (channel === constants.MOBILE_PUSH) {
376
+ } else if (channel === constants.MOBILE_PUSH || channel === constants.WECHAT) {
344
377
  showDone = currentStep === "createTemplateContent" || slidBoxContent === "editTemplate";
345
378
  }
346
379
 
@@ -379,7 +412,7 @@ class Creatives extends React.Component {
379
412
  }
380
413
  }
381
414
  shouldShowContinueFooter = () => { // only for email for now, has to be modified according to channel
382
- const {slidBoxContent, templateStep, currentChannel, emailCreateMode, mobilePushCreateMode} = this.state;
415
+ const {slidBoxContent, templateStep, currentChannel, emailCreateMode, mobilePushCreateMode, weChatTemplateType} = this.state;
383
416
  let isShowContinueFooter = false;
384
417
  const currentStep = this.creativesTemplateSteps[templateStep];
385
418
  const channel = currentChannel.toUpperCase();
@@ -391,6 +424,8 @@ class Creatives extends React.Component {
391
424
  }
392
425
  } else if (currentChannel.toUpperCase() === constants.MOBILE_PUSH) {
393
426
  isShowContinueFooter = !isEmpty(mobilePushCreateMode) && currentStep === "modeSelection";
427
+ } else if (currentChannel.toUpperCase() === constants.WECHAT) {
428
+ isShowContinueFooter = !isEmpty(weChatTemplateType) && currentStep === "modeSelection";
394
429
  }
395
430
 
396
431
  return isShowContinueFooter;
@@ -407,8 +442,8 @@ class Creatives extends React.Component {
407
442
  return false;
408
443
  }
409
444
  render() {
410
- const {slidBoxContent, isGetFormData, showSlideBox, templateData, currentChannel, emailCreateMode, templateStep, isLoadingContent, mobilePushCreateMode, isDiscardMessage} = this.state;
411
- const {isFullMode, creativesMode, cap, isUploading, channelsToHide, forwardedTags} = this.props;
445
+ const {slidBoxContent, isGetFormData, showSlideBox, templateData, currentChannel, emailCreateMode, templateStep, isLoadingContent, mobilePushCreateMode, isDiscardMessage, weChatTemplateType, weChatMaptemplateStep, forwardedTags} = this.state;
446
+ const {isFullMode, creativesMode, cap, isUploading, channelsToHide, selectedWeChatAccount} = this.props;
412
447
  return (
413
448
  <SlideBoxWrapper className={classnames(`${classPrefix} ${isFullMode ? 'creatives-full-mode' : 'creatives-library-mode'}`)}>
414
449
  <CapSlideBox
@@ -425,7 +460,11 @@ class Creatives extends React.Component {
425
460
  isLoadingContent={isLoadingContent}
426
461
  shouldShowTemplateName={this.templateContainerDetails}
427
462
  templateNameRenderProp={this.templateNameRenderProp}
463
+ weChatMaptemplateStep={weChatMaptemplateStep}
464
+ onWeChatMaptemplateStepChange={this.onWeChatMaptemplateStepChange}
465
+ weChatTemplateType={weChatTemplateType}
428
466
  showPrefix={!isUploading} // not show back button when email template is being uploaded
467
+ templateStep={this.creativesTemplateSteps[templateStep]}
429
468
  />
430
469
  }
431
470
  content={
@@ -460,6 +499,11 @@ class Creatives extends React.Component {
460
499
  onValidationFail={this.onValidationFail}
461
500
  channelsToHide={channelsToHide}
462
501
  forwardedTags={forwardedTags}
502
+ weChatTemplateType={weChatTemplateType}
503
+ onWechatTemplateChange={this.onWechatTemplateChange}
504
+ weChatMaptemplateStep={weChatMaptemplateStep}
505
+ selectedWeChatAccount={selectedWeChatAccount}
506
+ onWeChatMaptemplateStepChange={this.onWeChatMaptemplateStepChange}
463
507
  />
464
508
  }
465
509
  footer={this.shouldShowFooter() &&
@@ -506,6 +550,7 @@ Creatives.propTypes = {
506
550
  EmailLayout: PropTypes.string,
507
551
  channelsToHide: PropTypes.array,
508
552
  forwardedTags: PropTypes.object,
553
+ selectedWeChatAccount: PropTypes.object,
509
554
  };
510
555
  const mapStatesToProps = () => createStructuredSelector({
511
556
  isLoading: isLoadingSelector(),
@@ -24,4 +24,19 @@ $classPrefix: add-creatives-section;
24
24
  width: 100%;
25
25
  }
26
26
  }
27
+ .slidebox-header div:first-child {
28
+ width: 100%;
29
+ }
30
+ .wechat-steps {
31
+ width: 40% !important;
32
+ left: 20%;
33
+ position: relative;
34
+ .ant-steps-item-title::after {
35
+ top: 8px;
36
+ }
37
+ .ant-steps-item-content {
38
+ vertical-align: middle;
39
+ padding-top: 4px;
40
+ }
41
+ }
27
42
  }
@@ -4,22 +4,22 @@
4
4
  * This contains all the text for the EmailWrapper component.
5
5
  */
6
6
  import { defineMessages } from 'react-intl';
7
- const scope = 'creatives.containersV2.Creatives';
7
+ const scope = 'app.containers.Creatives';
8
8
  export default defineMessages({
9
9
  "header": {
10
- id: 'creatives.containersV2.Creatives.header',
10
+ id: 'app.containers.Creatives.header',
11
11
  defaultMessage: 'This is EmailWrapper container !',
12
12
  },
13
13
  "continue": {
14
- id: 'creatives.containersV2.Creatives.continue',
14
+ id: 'app.containers.Creatives.continue',
15
15
  defaultMessage: 'Continue',
16
16
  },
17
17
  "lastUpdated": {
18
- id: 'creatives.containersV2.Creatives.lastUpdated',
18
+ id: 'app.containers.Creatives.lastUpdated',
19
19
  defaultMessage: 'Last updated: {date} by {user}',
20
20
  },
21
21
  "by": {
22
- id: 'creatives.containersV2.Creatives.by',
22
+ id: 'app.containers.Creatives.by',
23
23
  defaultMessage: 'by',
24
24
  },
25
25
  "uploadedAt": {
@@ -259,7 +259,7 @@ export default defineMessages({
259
259
  defaultMessage: `Edit message content`,
260
260
  },
261
261
  "createMessageContent": {
262
- id: `${scope}.createMessageContent`,
262
+ id: `${scope}.editMessageContent`,
263
263
  defaultMessage: `New {channel} message`,
264
264
  },
265
265
  "creativeTemplatesDesc": {
@@ -274,28 +274,24 @@ export default defineMessages({
274
274
  id: `${scope}.creativesTemplatesSaveFullMode`,
275
275
  defaultMessage: `Create`,
276
276
  },
277
+ "creativesTemplatesUpdate": {
278
+ id: `${scope}.creativesTemplatesUpdate`,
279
+ defaultMessage: `Update`,
280
+ },
277
281
  "creativesTemplatesDiscard": {
278
282
  id: `${scope}.creativesTemplatesDiscard`,
279
283
  defaultMessage: `Discard`,
280
284
  },
281
285
  "creativesTemplatesEdit": {
282
- id: `${scope}.creativesTemplatesEdit`,
286
+ id: `${scope}.creativesTemplatesSave`,
283
287
  defaultMessage: `Edit`,
284
288
  },
285
289
  "creativesTemplatesEditName": {
286
- id: `${scope}.creativesTemplatesEditName`,
290
+ id: `${scope}.creativesTemplatesSave`,
287
291
  defaultMessage: `Edit name`,
288
292
  },
289
293
  "wechatAccountNotConfigured": {
290
294
  id: `${scope}.wechatAccountNotConfigured`,
291
295
  defaultMessage: 'Selected wechat account is not configured to create wechat templates',
292
296
  },
293
- "selectTemplate": {
294
- id: `${scope}.selectTemplate`,
295
- defaultMessage: 'Select template',
296
- },
297
- "addContent": {
298
- id: `${scope}.addContent`,
299
- defaultMessage: 'Add content',
300
- },
301
297
  });
@@ -7,7 +7,6 @@ import { FormattedMessage } from 'react-intl';
7
7
  import { createStructuredSelector } from 'reselect';
8
8
  import makeSelectDashboard from './selectors';
9
9
  import messages from './messages';
10
- // eslint-disable-next-line
11
10
  import { UserIsAuthenticated } from '../../../utils/authWrapper';
12
11
  import * as actions from './actions';
13
12
  import BreadCrumbs from '../../v2Components/BreadCrumbs/index';
@@ -25,7 +24,7 @@ export class Dashboard extends React.Component { // eslint-disable-line react/pr
25
24
  <FormattedMessage {...messages.header}>{(message) => (<Helmet
26
25
  title={message}
27
26
  meta={[
28
- { name: 'description', content: <FormattedMessage {...messages.header}/> },
27
+ { name: 'description', content: 'Dashboard' },
29
28
  ]}
30
29
  />)}
31
30
  </FormattedMessage>
@@ -7,7 +7,7 @@ import { defineMessages } from 'react-intl';
7
7
 
8
8
  export default defineMessages({
9
9
  header: {
10
- id: 'creatives.containersV2.Dashboard.header',
10
+ id: 'app.containers.Dashboard.header',
11
11
  defaultMessage: 'Dashboard',
12
12
  },
13
13
  });
@@ -814,7 +814,7 @@ export class Ebill extends React.Component { // eslint-disable-line react/prefer
814
814
  console.log('isValid');
815
815
  return true;
816
816
  }
817
- const message = getMessageObject('error', this.props.intl.formatMessage(messages.templateDataNotValid), true);
817
+ const message = getMessageObject('error', 'Template data is not valid', true);
818
818
  this.props.globalActions.addMessageToQueue(message);
819
819
  console.log('not valid');
820
820
  return false;