@capillarytech/creatives-library 2.0.58 → 2.0.59

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.
@@ -0,0 +1,10 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="407px" height="574px" viewBox="0 0 407 574" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch -->
4
+ <title>iPad-PNG-Free-Download</title>
5
+ <desc>Created with Sketch.</desc>
6
+ <defs></defs>
7
+ <g id="Full-page-" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
+ <image id="iPad-PNG-Free-Download" x="0" y="0" width="407" height="574" xlink:href="data:image/png;base64,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"></image>
9
+ </g>
10
+ </svg>
@@ -556,7 +556,8 @@ class FormBuilder extends React.Component { // eslint-disable-line react/prefer-
556
556
  _.forEach(this.state.formData, (tab, index) => {
557
557
  let isCurrentTabValid = true;
558
558
  let skipValidation = false;
559
- if (type.toLowerCase() === 'embedded' && ((isOnlyAndroid && parseInt(index) === 1) || (isOnlyIos && parseInt(index) === 0))) {
559
+ if (type.toLowerCase() === 'embedded' && ((isOnlyAndroid && parseInt(index) === 1) || (isOnlyIos && parseInt(index) === 0)) && isOnlyAndroid !== isOnlyIos) {
560
+ // skip validation of the tab which is not open in embedded mode
560
561
  skipValidation = true;
561
562
  }
562
563
  if (!isNaN(index) && tab && !skipValidation) {
@@ -7,6 +7,7 @@ import SmsCreate from '../Sms/Create';
7
7
  import SmsEdit from '../Sms/Edit';
8
8
  import Email from '../Email';
9
9
  import EmailWrapper from '../EmailWrapper';
10
+ import MobilepusWrapper from '../MobilepushWrapper';
10
11
  import EmailPreviewV2 from '../../components/EmailPreviewV2';
11
12
  import CallTask from '../CallTask';
12
13
  import MobliPushEdit from '../MobilePush/Edit';
@@ -33,8 +34,10 @@ function SlideBoxContent(props) {
33
34
  onChannelChange,
34
35
  onEmailModeChange,
35
36
  emailCreateMode,
37
+ onMobilepushModeChange,
38
+ mobilePushCreateMode,
36
39
  templateStep,
37
- onEmailNextStep,
40
+ onCreateNextStep,
38
41
  cap,
39
42
  onResetStep,
40
43
  isFullMode,
@@ -152,7 +155,7 @@ function SlideBoxContent(props) {
152
155
  templateData={templateData}
153
156
  type={type}
154
157
  step={templateStep}
155
- showNextStep={onEmailNextStep}
158
+ showNextStep={onCreateNextStep}
156
159
  isFullMode={isFullMode}
157
160
  cap={cap}
158
161
  onResetStep={onResetStep}
@@ -181,7 +184,7 @@ function SlideBoxContent(props) {
181
184
  getFormLibraryData={getFormData}
182
185
  setIsLoadingContent={setIsLoadingContent}
183
186
  location={{
184
- pathname: `/mobilepush`,
187
+ pathname: `/mobilepush/edit/`,
185
188
  query,
186
189
  }}
187
190
  isFullMode={false}
@@ -190,6 +193,24 @@ function SlideBoxContent(props) {
190
193
  templateData={templateData}
191
194
  />
192
195
  }
196
+ {isCreateMPush &&
197
+ <MobilepusWrapper
198
+ key="creatives-mobilepush-wrapper"
199
+ date={new Date().getMilliseconds()}
200
+ setIsLoadingContent={setIsLoadingContent}
201
+ onMobilepushModeChange={onMobilepushModeChange}
202
+ mobilePushCreateMode={mobilePushCreateMode}
203
+ isGetFormData={isGetFormData}
204
+ getFormData={getFormData}
205
+ templateData={templateData}
206
+ type={type}
207
+ step={templateStep}
208
+ showNextStep={onCreateNextStep}
209
+ isFullMode={isFullMode}
210
+ cap={cap}
211
+ onResetStep={onResetStep}
212
+ query={query}/>
213
+ }
193
214
  </CreativesWrapper>
194
215
  );
195
216
  }
@@ -208,11 +229,13 @@ SlideBoxContent.propTypes = {
208
229
  onEmailModeChange: PropTypes.func,
209
230
  emailCreateMode: PropTypes.string,
210
231
  templateStep: PropTypes.string,
211
- onEmailNextStep: PropTypes.func,
232
+ onCreateNextStep: PropTypes.func,
212
233
  cap: PropTypes.object,
213
234
  onResetStep: PropTypes.func,
214
235
  onCallTaskSubmit: PropTypes.func,
215
236
  isFullMode: PropTypes.bool,
216
237
  setIsLoadingContent: PropTypes.func,
238
+ onMobilepushModeChange: PropTypes.func,
239
+ mobilePushCreateMode: PropTypes.string,
217
240
  };
218
241
  export default SlideBoxContent;
@@ -3,7 +3,7 @@ import { FormattedMessage } from 'react-intl';
3
3
  import { CapButton } from '@capillarytech/cap-ui-library';
4
4
  import PropTypes from 'prop-types';
5
5
  function SlideBoxFooter(props) {
6
- const { slidBoxContent, onSave, messages, onEditTemplate, onEmailNextStep} = props;
6
+ const { slidBoxContent, onSave, messages, onEditTemplate, onCreateNextStep} = props;
7
7
  return (
8
8
  <div>
9
9
  <div>
@@ -13,7 +13,7 @@ function SlideBoxFooter(props) {
13
13
  </CapButton>
14
14
  )}
15
15
  {props.shouldShowContinueFooter() &&
16
- <CapButton onClick={onEmailNextStep}>
16
+ <CapButton onClick={onCreateNextStep}>
17
17
  <FormattedMessage {...messages.continue} />
18
18
  </CapButton>
19
19
  }
@@ -31,7 +31,7 @@ SlideBoxFooter.propTypes = {
31
31
  onSave: PropTypes.func,
32
32
  messages: PropTypes.object,
33
33
  onEditTemplate: PropTypes.func,
34
- onEmailNextStep: PropTypes.func,
34
+ onCreateNextStep: PropTypes.func,
35
35
  shouldShowContinueFooter: PropTypes.func,
36
36
  shouldShowDoneFooter: PropTypes.func,
37
37
  };
@@ -71,11 +71,11 @@ class Creatives extends React.Component {
71
71
  onChannelChange = (channel) => {
72
72
  this.setState({currentChannel: channel});
73
73
  }
74
- onEmailNextStep = () => {
74
+ onCreateNextStep = () => {
75
75
  this.setState((prevState) => {
76
76
  let templateStep = prevState.templateStep + 1;
77
77
  const {emailCreateMode, currentChannel} = prevState;
78
- if (currentChannel.toUpperCase() === constants.EMAIL && emailCreateMode === "upload") {
78
+ if ((currentChannel.toUpperCase() === constants.EMAIL && emailCreateMode === "upload") || currentChannel.toUpperCase() === constants.MOBILE_PUSH) {
79
79
  templateStep = prevState.templateStep + 2;
80
80
  }
81
81
 
@@ -88,7 +88,9 @@ class Creatives extends React.Component {
88
88
  onEmailModeChange = (mode) => {
89
89
  this.setState({ emailCreateMode: mode});
90
90
  }
91
-
91
+ onMobilepushModeChange = (mode) => {
92
+ this.setState({ mobilePushCreateMode: mode});
93
+ }
92
94
 
93
95
  onCallTaskSubmit = (data) => {
94
96
  this.props.getCreativesData({
@@ -118,10 +120,11 @@ class Creatives extends React.Component {
118
120
  const formData = {
119
121
  subject: templateData.emailSubject,
120
122
  html_content: templateData.emailBody,
121
- is_drag_drop: false,
122
- lang_id: 411,
123
- iso_code: "en",
124
- language: "English",
123
+ is_drag_drop: templateData.is_drag_drop,
124
+ lang_id: templateData.lang_id,
125
+ iso_code: templateData.iso_code,
126
+ language: templateData.language,
127
+ drag_drop_id: templateData.drag_drop_id,
125
128
  };
126
129
  creativesTeplateData = {
127
130
  base: formData,
@@ -136,6 +139,19 @@ class Creatives extends React.Component {
136
139
  edit: true,
137
140
  type: channel,
138
141
  };
142
+ } else if (channel === constants.MOBILE_PUSH) {
143
+ const mode = get(templateData, 'androidContent.type') || get(templateData, 'iosContent.type');
144
+ creativesTeplateData = {
145
+ type: channel,
146
+ name: templateData.messageSubject,
147
+ versions: {
148
+ base: {
149
+ ANDROID: templateData.androidContent,
150
+ IOS: templateData.iosContent,
151
+ },
152
+ },
153
+ definition: {accountId: templateData.accountId, mode: mode.toLowerCase()},
154
+ };
139
155
  }
140
156
  return creativesTeplateData;
141
157
  }
@@ -143,12 +159,14 @@ class Creatives extends React.Component {
143
159
  }
144
160
 
145
161
  getCreativesData = (channel, template) => { //from creatives to consumers
146
- const templateData = {channel };
162
+ let templateData = {channel };
147
163
  if (channel === constants.SMS && template.value.base) {
148
164
  templateData.messageBody = template.value.base['sms-editor'];
149
165
  } else if (channel === constants.EMAIL && template.value.base) {
150
- templateData.emailBody = template.value.base.html_content;
151
- templateData.emailSubject = template.value.base.subject;
166
+ const emailBase = template.value.base;
167
+ templateData = {...templateData, ...emailBase, emailBody: emailBase.html_content, emailSubject: emailBase.subject};
168
+ delete templateData.html_content;
169
+ delete templateData.subject;
152
170
  } else if (channel === constants.MOBILE_PUSH && get(template, "value.versions.base")) {
153
171
  const mobilpushTemplate = template.value;
154
172
  templateData.accountId = get(mobilpushTemplate, 'definition.accountId');
@@ -229,15 +247,19 @@ class Creatives extends React.Component {
229
247
  };
230
248
  shouldShowFooter = () => {
231
249
  const {isFullMode } = this.props;
232
- const {slidBoxContent, currentChannel, emailCreateMode, templateStep} = this.state;
250
+ const {slidBoxContent, currentChannel, emailCreateMode, templateStep, mobilePushCreateMode} = this.state;
233
251
  const channel = currentChannel.toUpperCase();
234
252
  const currentStep = this.creativesTemplateSteps[templateStep];
235
253
  let showFooter = false;
254
+ const isMobilepush = channel === constants.MOBILE_PUSH;
236
255
  if (!isFullMode ) {
237
256
  const isEmailCreate = slidBoxContent === 'createTemplate' && channel === constants.EMAIL && currentStep !== 'createTemplateContent';
238
257
  const isCreate = (slidBoxContent === 'editTemplate' || slidBoxContent === 'createTemplate') && !isEmailCreate;
239
258
  const isCallTask = channel === 'CALLTASK';
240
259
  showFooter = (isCreate || (isEmailCreate && emailCreateMode) || slidBoxContent === 'preview') && !isCallTask;
260
+ if (isMobilepush) {
261
+ showFooter = currentStep === "modeSelection" || (currentStep === 'createTemplateContent' && !isEmpty(mobilePushCreateMode));
262
+ }
241
263
  } else if (channel === constants.EMAIL && isFullMode) {
242
264
  const isEmailCreate = slidBoxContent === 'createTemplate' && channel === constants.EMAIL && currentStep !== 'createTemplateContent';
243
265
  showFooter = isEmailCreate && emailCreateMode;
@@ -257,23 +279,36 @@ class Creatives extends React.Component {
257
279
  shouldShowDoneFooter = () => {
258
280
  const {slidBoxContent, templateStep, currentChannel} = this.state;
259
281
  const currentStep = this.creativesTemplateSteps[templateStep];
260
- const isEmailCreate = slidBoxContent === 'createTemplate' && currentChannel.toUpperCase() === constants.EMAIL && currentStep !== 'createTemplateContent';
261
- const isCreate = (slidBoxContent === 'editTemplate' || slidBoxContent === 'createTemplate') && !isEmailCreate;
262
- return isCreate;
282
+ let showDone = false;
283
+ const channel = currentChannel.toUpperCase();
284
+ if (channel === constants.EMAIL || channel === constants.SMS) {
285
+ const isEmailCreate = slidBoxContent === 'createTemplate' && currentChannel.toUpperCase() === constants.EMAIL && currentStep !== 'createTemplateContent';
286
+ showDone = (slidBoxContent === 'editTemplate' || slidBoxContent === 'createTemplate') && !isEmailCreate;
287
+ } else if (channel === constants.MOBILE_PUSH) {
288
+ showDone = currentStep === "createTemplateContent" || slidBoxContent === "editTemplate";
289
+ }
290
+
291
+ return showDone;
263
292
  }
264
293
  shouldShowContinueFooter = () => { // only for email for now, has to be modified according to channel
265
- const {slidBoxContent, templateStep, currentChannel, emailCreateMode} = this.state;
294
+ const {slidBoxContent, templateStep, currentChannel, emailCreateMode, mobilePushCreateMode} = this.state;
266
295
  let isShowContinueFooter = false;
267
- if ((emailCreateMode === "upload" && !isEmpty(this.props.EmailLayout)) || emailCreateMode === "editor") {
268
- const currentStep = this.creativesTemplateSteps[templateStep];
269
- let isEmailCreate = slidBoxContent === 'createTemplate';
270
- isEmailCreate = currentChannel.toUpperCase() === constants.EMAIL && ((emailCreateMode === "upload" && currentStep !== 'createTemplateContent') || ( emailCreateMode === "editor" && currentStep !== 'createTemplateContent' && currentStep !== "templateSelection"));
271
- isShowContinueFooter = isEmailCreate && emailCreateMode;
296
+ const currentStep = this.creativesTemplateSteps[templateStep];
297
+ const channel = currentChannel.toUpperCase();
298
+ if (channel === constants.EMAIL || channel === constants.SMS) {
299
+ if ((emailCreateMode === "upload" && !isEmpty(this.props.EmailLayout)) || emailCreateMode === "editor") {
300
+ let isEmailCreate = slidBoxContent === 'createTemplate';
301
+ isEmailCreate = currentChannel.toUpperCase() === constants.EMAIL && ((emailCreateMode === "upload" && currentStep !== 'createTemplateContent') || ( emailCreateMode === "editor" && currentStep !== 'createTemplateContent' && currentStep !== "templateSelection"));
302
+ isShowContinueFooter = isEmailCreate && emailCreateMode;
303
+ }
304
+ } else if (currentChannel.toUpperCase() === constants.MOBILE_PUSH) {
305
+ isShowContinueFooter = !isEmpty(mobilePushCreateMode) && currentStep === "modeSelection";
272
306
  }
307
+
273
308
  return isShowContinueFooter;
274
309
  }
275
310
  render() {
276
- const {slidBoxContent, isGetFormData, showSlideBox, templateData, currentChannel, emailCreateMode, templateStep, isLoadingContent} = this.state;
311
+ const {slidBoxContent, isGetFormData, showSlideBox, templateData, currentChannel, emailCreateMode, templateStep, isLoadingContent, mobilePushCreateMode} = this.state;
277
312
  const {isFullMode, creativesMode, cap, isUploading} = this.props;
278
313
  return (
279
314
  <div className={classnames(`${classPrefix} ${isFullMode ? 'creatives-full-mode' : 'creatives-library-mode'}`)}>
@@ -308,10 +343,12 @@ class Creatives extends React.Component {
308
343
  onEmailModeChange={this.onEmailModeChange}//used when create is clicked in email
309
344
  emailCreateMode={emailCreateMode}// upload zip || use editor are values
310
345
  templateStep={this.creativesTemplateSteps[templateStep]}
311
- onEmailNextStep={this.onEmailNextStep}
346
+ onCreateNextStep={this.onCreateNextStep}
312
347
  onResetStep={this.resetStep}
313
348
  cap={cap}
314
349
  setIsLoadingContent={this.setIsLoadingContent}
350
+ onMobilepushModeChange={this.onMobilepushModeChange}
351
+ mobilePushCreateMode={mobilePushCreateMode}
315
352
  />
316
353
  }
317
354
  footer={this.shouldShowFooter() &&
@@ -320,7 +357,7 @@ class Creatives extends React.Component {
320
357
  onSave={this.saveMessage}
321
358
  onEditTemplate={this.onEditTemplate}
322
359
  slidBoxContent={slidBoxContent}
323
- onEmailNextStep={this.onEmailNextStep}
360
+ onCreateNextStep={this.onCreateNextStep}
324
361
  currentChannel={currentChannel.toUpperCase()}
325
362
  templateStep={this.creativesTemplateSteps[templateStep]}
326
363
  emailCreateMode={emailCreateMode}
@@ -504,10 +504,12 @@ export class Create extends React.Component { // eslint-disable-line react/prefe
504
504
  };
505
505
  getFormData = (e) => {
506
506
  console.log('posting final result', this.state.formData);
507
+ const templateData = this.getTransformedData(this.state.formData);
507
508
  const response = {
508
509
  action: "getFormData",
509
- value: this.getTransformedData(this.state.formData),
510
+ value: templateData,
510
511
  validity: this.state.isFormValid,
512
+ type: templateData.type,
511
513
  };
512
514
  this.setState({checkValidation: true});
513
515
  if (e) {
@@ -2216,7 +2218,7 @@ export class Create extends React.Component { // eslint-disable-line react/prefe
2216
2218
  injectedTags={this.state.injectedTags ? this.state.injectedTags : {}}
2217
2219
  onFormValidityChange={this.setFormValidity}
2218
2220
  usingTabContainer
2219
- checkValidation={false}
2221
+ checkValidation={this.state.checkValidation}
2220
2222
  iosCtasData={this.state.iosCtasData}
2221
2223
  tabKey={this.state.tabKey}
2222
2224
  tabCount={2}
@@ -0,0 +1,92 @@
1
+ /*
2
+ *
3
+ * MobilepushWrapper
4
+ *
5
+ */
6
+ import PropTypes from 'prop-types';
7
+ import React from 'react';
8
+ import { connect } from 'react-redux';
9
+ import { FormattedMessage } from 'react-intl';
10
+ import {CapRadioCard, CapHeader} from '@capillarytech/cap-ui-library';
11
+ import {isEmpty} from 'lodash';
12
+ import MobilepushCreate from '../MobilePush/Create';
13
+ import messages from './messages';
14
+
15
+ export class MobilepushWrapper extends React.Component { // eslint-disable-line react/prefer-stateless-function
16
+ constructor(props) {
17
+ super(props);
18
+ this.modes = [
19
+ {
20
+ title: <FormattedMessage {...messages.text}/>,
21
+ content: <FormattedMessage {...messages.text}/>,
22
+ value: 'text',
23
+ // onClick: () => {
24
+ // this.emailUploader.current.click();
25
+ // },
26
+ },
27
+ {
28
+ title: <FormattedMessage {...messages.image}/>,
29
+ content: <FormattedMessage {...messages.image}/>,
30
+ value: 'image',
31
+ },
32
+ ];
33
+ }
34
+ onChange = (e) => {
35
+ this.props.onMobilepushModeChange( e.target.value );
36
+ };
37
+ render() {
38
+ const {mobilePushCreateMode, step, getFormData, setIsLoadingContent, isGetFormData, query} = this.props;
39
+ const isShowMobilepushCreate = !isEmpty(mobilePushCreateMode);
40
+ return (
41
+ <div>
42
+ {step === "modeSelection" ?
43
+ <div>
44
+ <CapHeader size="small" title={<FormattedMessage {...messages.createMode}/>}/>
45
+ <CapRadioCard
46
+ panes={this.modes}
47
+ onChange={this.onChange}
48
+ selected={mobilePushCreateMode}
49
+ />
50
+ </div>
51
+ :
52
+ <div>
53
+ {isShowMobilepushCreate && <MobilepushCreate
54
+ getFormLibraryData={getFormData}
55
+ setIsLoadingContent={setIsLoadingContent}
56
+ location={{
57
+ pathname: `/mobilepush/create/${mobilePushCreateMode}`,
58
+ query,
59
+ }}
60
+ params={{mode: mobilePushCreateMode}}
61
+ isFullMode={false}
62
+ isGetFormData={isGetFormData}
63
+ route={{ name: 'mobilepush' }}
64
+ />
65
+
66
+
67
+ }
68
+ </div>
69
+ }
70
+ </div>
71
+ );
72
+ }
73
+ }
74
+
75
+ MobilepushWrapper.propTypes = {
76
+ onMobilepushModeChange: PropTypes.func,
77
+ mobilePushCreateMode: PropTypes.string,
78
+ step: PropTypes.string,
79
+ getFormData: PropTypes.string,
80
+ setIsLoadingContent: PropTypes.func,
81
+ isGetFormData: PropTypes.bool,
82
+ query: PropTypes.object,
83
+ };
84
+
85
+
86
+ function mapDispatchToProps(dispatch) {
87
+ return {
88
+ dispatch,
89
+ };
90
+ }
91
+
92
+ export default connect(null, mapDispatchToProps)(MobilepushWrapper);
@@ -0,0 +1,25 @@
1
+ /*
2
+ * MobilepushWrapper Messages
3
+ *
4
+ * This contains all the text for the MobilepushWrapper component.
5
+ */
6
+ import { defineMessages } from 'react-intl';
7
+
8
+ export default defineMessages({
9
+ header: {
10
+ id: 'app.containers.MobilepushWrapper.header',
11
+ defaultMessage: 'This is MobilepushWrapper container !',
12
+ },
13
+ image: {
14
+ id: 'app.containers.MobilepushWrapper.image',
15
+ defaultMessage: 'Image content',
16
+ },
17
+ text: {
18
+ id: 'app.containers.MobilepushWrapper.text',
19
+ defaultMessage: 'Text content',
20
+ },
21
+ createMode: {
22
+ id: 'app.containers.MobilepushWrapper.createMode',
23
+ defaultMessage: 'Which type of content you want to create?',
24
+ },
25
+ });
@@ -0,0 +1,10 @@
1
+ // import React from 'react';
2
+ // import { shallow } from 'enzyme';
3
+
4
+ // import { MobilepushWrapper } from '../index';
5
+
6
+ describe('<MobilepushWrapper />', () => {
7
+ it('Expect to have unit tests specified', () => {
8
+ expect(true).toEqual(false);
9
+ });
10
+ });
@@ -0,0 +1,8 @@
1
+ .wechat-container {
2
+ .cap-checkbox {
3
+ margin-bottom: 24px;
4
+ .ant-checkbox-wrapper{
5
+ padding-left: 0;
6
+ }
7
+ }
8
+ }
@@ -0,0 +1,52 @@
1
+ /*
2
+ *
3
+ * WeChat actions
4
+ *
5
+ */
6
+
7
+ import * as types from './constants';
8
+
9
+ export function getDefaultWeChatTemplates(channel, queryParams) {
10
+ return {
11
+ type: types.GET_WECHAT_DEFAULT_TEMPLATES_REQUEST,
12
+ channel,
13
+ queryParams,
14
+ };
15
+ }
16
+ export function createTemplate(template) {
17
+ return {
18
+ type: types.CREATE_TEMPLATE_REQUEST, template,
19
+ };
20
+ }
21
+
22
+ export function clearCreateResponse() {
23
+ return {
24
+ type: types.CLEAR_CREATE_RESPONSE_REQUEST,
25
+ };
26
+ }
27
+
28
+ export function getWeCrmAccounts() {
29
+ return {
30
+ type: types.GET_WECRM_ACCOUNTS_REQUEST,
31
+ };
32
+ }
33
+
34
+ export function setWeChatAccount(weChatAccount) {
35
+ return {
36
+ type: types.SET_WECHAT_ACCOUNT,
37
+ weChatAccount,
38
+ };
39
+ }
40
+
41
+ export function getTemplateDetails(id) {
42
+ console.log('getting template', id);
43
+ return {
44
+ type: types.GET_TEMPLATE_DETAILS_REQUEST, id,
45
+ };
46
+ }
47
+ export function setTemplateDetails(templateDetails) {
48
+ return {
49
+ type: types.GET_TEMPLATE_DETAILS_SUCCESS,
50
+ data: templateDetails,
51
+ };
52
+ }
@@ -0,0 +1,28 @@
1
+ /*
2
+ *
3
+ * WeChat constants
4
+ *
5
+ */
6
+
7
+ export const GET_WECHAT_DEFAULT_TEMPLATES_REQUEST = 'app/containers/WeChat/GET_WECHAT_DEFAULT_TEMPLATES_REQUEST';
8
+ export const GET_WECHAT_DEFAULT_TEMPLATES_SUCCESS = 'app/containers/WeChat/GET_WECHAT_DEFAULT_TEMPLATES_SUCCESS';
9
+ export const GET_WECHAT_DEFAULT_TEMPLATES_FAILURE = 'app/containers/WeChat/GET_WECHAT_DEFAULT_TEMPLATES_FAILURE';
10
+
11
+ export const CREATE_TEMPLATE_REQUEST = 'app/containers/WeChat/CREATE_TEMPLATE_REQUEST';
12
+ export const CREATE_TEMPLATE_SUCCESS = 'app/containers/WeChat/CREATE_TEMPLATE_SUCCESS';
13
+ export const CREATE_TEMPLATE_FAILURE = 'app/containers/WeChat/CREATE_TEMPLATE_FAILURE';
14
+
15
+ export const CLEAR_CREATE_RESPONSE_REQUEST = 'app/containers/WeChat/CLEAR_CREATE_RESPONSE_REQUEST';
16
+ export const CLEAR_CREATE_RESPONSE_SUCCESS = 'app/containers/WeChat/CLEAR_CREATE_RESPONSE_SUCCESS';
17
+ export const CLEAR_CREATE_RESPONSE_FAILURE = 'app/containers/WeChat/CLEAR_CREATE_RESPONSE_FAILURE';
18
+
19
+ export const GET_WECRM_ACCOUNTS_REQUEST = "app/containers/WeChat/GET_WECRM_ACCOUNTS_REQUEST";
20
+ export const GET_WECRM_ACCOUNTS_SUCCESS = "app/containers/WeChat/GET_WECRM_ACCOUNTS_SUCCESS";
21
+ export const GET_WECRM_ACCOUNTS_FAILURE = "app/containers/WeChat/GET_WECRM_ACCOUNTS_FAILURE";
22
+
23
+ export const GET_TEMPLATE_DETAILS_REQUEST = 'app/containers/WeChat/GET_TEMPLATE_DETAILS_REQUEST';
24
+ export const GET_TEMPLATE_DETAILS_SUCCESS = 'app/containers/WeChat/GET_TEMPLATE_DETAILS_SUCCESS';
25
+ export const GET_TEMPLATE_DETAILS_FAILURE = 'app/containers/WeChat/GET_TEMPLATE_DETAILS_FAILURE';
26
+
27
+
28
+ export const SET_WECHAT_ACCOUNT = "app/containers/WeChat/SET_WECHAT_ACCOUNT";