@capillarytech/creatives-library 2.0.61 → 2.0.62

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 (37) hide show
  1. package/app.js +1 -1
  2. package/components/FormBuilder/_formBuilder.scss +1 -2
  3. package/components/FormBuilder/index.js +1 -2
  4. package/components/PreviewSideBar/_previewsidebar.scss +1 -1
  5. package/components/TemplatePreview/_templatePreview.scss +1 -1
  6. package/components/TemplatePreview/index.js +1 -1
  7. package/containers/CreativesContainer/SlideBoxContent.js +5 -28
  8. package/containers/CreativesContainer/SlideBoxFooter.js +3 -3
  9. package/containers/CreativesContainer/index.js +25 -72
  10. package/containers/MobilePush/Create/index.js +2 -4
  11. package/containers/Sms/Create/_smsCreate.scss +1 -1
  12. package/containers/TemplatesV2/index.js +7 -8
  13. package/global-styles.js +1 -0
  14. package/index.html +2 -0
  15. package/index.js +1 -1
  16. package/package.json +1 -1
  17. package/components/EmailPreview/assets/images/iPad.svg +0 -10
  18. package/components/EmailPreview/assets/images/mobile.png +0 -0
  19. package/components/MobilePushPreviewV2/index.js +0 -120
  20. package/components/MobilePushPreviewV2/messages.js +0 -13
  21. package/components/MobilePushPreviewV2/tests/index.test.js +0 -10
  22. package/containers/MobilepushWrapper/index.js +0 -92
  23. package/containers/MobilepushWrapper/messages.js +0 -25
  24. package/containers/MobilepushWrapper/tests/index.test.js +0 -10
  25. package/containers/WeChat/_wechat.scss +0 -8
  26. package/containers/WeChat/actions.js +0 -52
  27. package/containers/WeChat/constants.js +0 -28
  28. package/containers/WeChat/index.js +0 -1635
  29. package/containers/WeChat/messages.js +0 -73
  30. package/containers/WeChat/reducer.js +0 -74
  31. package/containers/WeChat/sagas.js +0 -86
  32. package/containers/WeChat/selectors.js +0 -25
  33. package/containers/WeChat/tests/actions.test.js +0 -18
  34. package/containers/WeChat/tests/index.test.js +0 -10
  35. package/containers/WeChat/tests/reducer.test.js +0 -9
  36. package/containers/WeChat/tests/sagas.test.js +0 -15
  37. package/containers/WeChat/tests/selectors.test.js +0 -10
package/app.js CHANGED
@@ -67,7 +67,7 @@ if (module.hot) {
67
67
  render(translationMessages);
68
68
  });
69
69
  }
70
- const openSansObserver = new FontFaceObserver('Open Sans', {});
70
+ const openSansObserver = new FontFaceObserver('Roboto', {});
71
71
  // When Open Sans is loaded, add a font-family using Open Sans to the body
72
72
  openSansObserver.load().then(() => {
73
73
  document.body.classList.add('fontLoaded');
@@ -3,7 +3,6 @@
3
3
  .form-tab-header{
4
4
  display: flex;
5
5
  align-items: center;
6
- font-family: open-sans, sans-serif !important;
7
6
  font-style: normal;
8
7
  font-weight: 600;
9
8
  }
@@ -59,7 +58,7 @@
59
58
  display: inline-block;
60
59
  font-size: 16px;
61
60
  margin: 4px;
62
- font-family: Open-Sans;
61
+ // font-family: Open-Sans;
63
62
  text-align: center;
64
63
  width: 24px;
65
64
  height: 24px;
@@ -556,8 +556,7 @@ 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)) && isOnlyAndroid !== isOnlyIos) {
560
- // skip validation of the tab which is not open in embedded mode
559
+ if (type.toLowerCase() === 'embedded' && ((isOnlyAndroid && parseInt(index) === 1) || (isOnlyIos && parseInt(index) === 0))) {
561
560
  skipValidation = true;
562
561
  }
563
562
  if (!isNaN(index) && tab && !skipValidation) {
@@ -6,7 +6,7 @@
6
6
  .preview-info{
7
7
  text-align: center;
8
8
  color: #333333;
9
- font-family: Open-Sans;
9
+ // font-family: Open-Sans;
10
10
  line-height: 24px;
11
11
  font-size: 14px;
12
12
  }
@@ -229,7 +229,7 @@
229
229
 
230
230
  .preview-container{
231
231
  .preview-info {
232
- font-family: 'proxima-nova';
232
+ // font-family: 'proxima-nova';
233
233
  font-weight: 600;
234
234
  font-size: 16px;
235
235
  text-align: center;
@@ -155,7 +155,7 @@ class TemplatePreview extends React.Component { // eslint-disable-line react/pre
155
155
  </div>
156
156
  : ''
157
157
  }
158
- {this.props.templateData && this.props.templateData.updatedByName &&
158
+ {this.props.templateData &&
159
159
  [<p className="preview-info" key="preview-info-modified"><FormattedMessage {...messages.lastModified} />: {moment(this.props.templateData.updatedAt).format('MM-DD-YYYY')}</p>,
160
160
  <p style={{marginBottom: '8px'}} className="preview-info" key="preview-info-updated"><FormattedMessage {...messages.uploadedBy} /> : {this.props.templateData.updatedByName}</p>,
161
161
  ]
@@ -7,7 +7,6 @@ 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';
11
10
  import EmailPreviewV2 from '../../components/EmailPreviewV2';
12
11
  import CallTask from '../CallTask';
13
12
  import MobliPushEdit from '../MobilePush/Edit';
@@ -34,10 +33,8 @@ function SlideBoxContent(props) {
34
33
  onChannelChange,
35
34
  onEmailModeChange,
36
35
  emailCreateMode,
37
- onMobilepushModeChange,
38
- mobilePushCreateMode,
39
36
  templateStep,
40
- onCreateNextStep,
37
+ onEmailNextStep,
41
38
  cap,
42
39
  onResetStep,
43
40
  isFullMode,
@@ -54,7 +51,7 @@ function SlideBoxContent(props) {
54
51
  let channel = currentChannel;//for create mode
55
52
  const isCreateSms = slidBoxContent === 'createTemplate' && channel === constants.SMS;
56
53
  const isCreateMPush = slidBoxContent === 'createTemplate' && channel === constants.MOBILE_PUSH;
57
- const isCreateCallTask = slidBoxContent === 'createTemplate' && channel === 'CALLTASK';
54
+ const isCreateCallTask = slidBoxContent === 'createTemplate' && channel === constants.CALL_TASK;
58
55
  let isEditSms = false;
59
56
  let isEditEmailWithId = false;
60
57
  let isEmailEditWithContent = false;
@@ -155,7 +152,7 @@ function SlideBoxContent(props) {
155
152
  templateData={templateData}
156
153
  type={type}
157
154
  step={templateStep}
158
- showNextStep={onCreateNextStep}
155
+ showNextStep={onEmailNextStep}
159
156
  isFullMode={isFullMode}
160
157
  cap={cap}
161
158
  onResetStep={onResetStep}
@@ -184,7 +181,7 @@ function SlideBoxContent(props) {
184
181
  getFormLibraryData={getFormData}
185
182
  setIsLoadingContent={setIsLoadingContent}
186
183
  location={{
187
- pathname: `/mobilepush/edit/`,
184
+ pathname: `/mobilepush`,
188
185
  query,
189
186
  }}
190
187
  isFullMode={false}
@@ -193,24 +190,6 @@ function SlideBoxContent(props) {
193
190
  templateData={templateData}
194
191
  />
195
192
  }
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
- }
214
193
  </CreativesWrapper>
215
194
  );
216
195
  }
@@ -229,13 +208,11 @@ SlideBoxContent.propTypes = {
229
208
  onEmailModeChange: PropTypes.func,
230
209
  emailCreateMode: PropTypes.string,
231
210
  templateStep: PropTypes.string,
232
- onCreateNextStep: PropTypes.func,
211
+ onEmailNextStep: PropTypes.func,
233
212
  cap: PropTypes.object,
234
213
  onResetStep: PropTypes.func,
235
214
  onCallTaskSubmit: PropTypes.func,
236
215
  isFullMode: PropTypes.bool,
237
216
  setIsLoadingContent: PropTypes.func,
238
- onMobilepushModeChange: PropTypes.func,
239
- mobilePushCreateMode: PropTypes.string,
240
217
  };
241
218
  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, onCreateNextStep} = props;
6
+ const { slidBoxContent, onSave, messages, onEditTemplate, onEmailNextStep} = 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={onCreateNextStep}>
16
+ <CapButton onClick={onEmailNextStep}>
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
- onCreateNextStep: PropTypes.func,
34
+ onEmailNextStep: PropTypes.func,
35
35
  shouldShowContinueFooter: PropTypes.func,
36
36
  shouldShowDoneFooter: PropTypes.func,
37
37
  };
@@ -5,7 +5,7 @@ import {
5
5
  } from '@capillarytech/cap-ui-library';
6
6
  import { injectIntl } from 'react-intl';
7
7
  import classnames from 'classnames';
8
- import {isEmpty, get, forEach} from 'lodash';
8
+ import {isEmpty, get} from 'lodash';
9
9
  import { connect } from 'react-redux';
10
10
  import { createStructuredSelector } from 'reselect';
11
11
  import { bindActionCreators } from 'redux';
@@ -71,11 +71,11 @@ class Creatives extends React.Component {
71
71
  onChannelChange = (channel) => {
72
72
  this.setState({currentChannel: channel});
73
73
  }
74
- onCreateNextStep = () => {
74
+ onEmailNextStep = () => {
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") || currentChannel.toUpperCase() === constants.MOBILE_PUSH) {
78
+ if (currentChannel.toUpperCase() === constants.EMAIL && emailCreateMode === "upload") {
79
79
  templateStep = prevState.templateStep + 2;
80
80
  }
81
81
 
@@ -88,9 +88,7 @@ class Creatives extends React.Component {
88
88
  onEmailModeChange = (mode) => {
89
89
  this.setState({ emailCreateMode: mode});
90
90
  }
91
- onMobilepushModeChange = (mode) => {
92
- this.setState({ mobilePushCreateMode: mode});
93
- }
91
+
94
92
 
95
93
  onCallTaskSubmit = (data) => {
96
94
  this.props.getCreativesData({
@@ -120,11 +118,10 @@ class Creatives extends React.Component {
120
118
  const formData = {
121
119
  subject: templateData.emailSubject,
122
120
  html_content: templateData.emailBody,
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,
121
+ is_drag_drop: false,
122
+ lang_id: 411,
123
+ iso_code: "en",
124
+ language: "English",
128
125
  };
129
126
  creativesTeplateData = {
130
127
  base: formData,
@@ -139,19 +136,6 @@ class Creatives extends React.Component {
139
136
  edit: true,
140
137
  type: channel,
141
138
  };
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
- };
155
139
  }
156
140
  return creativesTeplateData;
157
141
  }
@@ -159,14 +143,12 @@ class Creatives extends React.Component {
159
143
  }
160
144
 
161
145
  getCreativesData = (channel, template) => { //from creatives to consumers
162
- let templateData = {channel };
146
+ const templateData = {channel };
163
147
  if (channel === constants.SMS && template.value.base) {
164
148
  templateData.messageBody = template.value.base['sms-editor'];
165
149
  } else if (channel === constants.EMAIL && template.value.base) {
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;
150
+ templateData.emailBody = template.value.base.html_content;
151
+ templateData.emailSubject = template.value.base.subject;
170
152
  } else if (channel === constants.MOBILE_PUSH && get(template, "value.versions.base")) {
171
153
  const mobilpushTemplate = template.value;
172
154
  templateData.accountId = get(mobilpushTemplate, 'definition.accountId');
@@ -175,11 +157,6 @@ class Creatives extends React.Component {
175
157
  delete androidContent.cuid;
176
158
  delete androidContent.luid;
177
159
  delete androidContent.communicationId;
178
- const custom = {};
179
- forEach(androidContent.custom, (customKeyValue) => {
180
- custom[customKeyValue.key] = customKeyValue.value;
181
- } );
182
- androidContent.custom = custom;
183
160
  templateData.androidContent = androidContent;
184
161
  templateData.androidContent.type = get(mobilpushTemplate, 'definition.mode').toUpperCase();
185
162
  templateData.androidContent.deviceType = 'ANDROID';
@@ -189,11 +166,6 @@ class Creatives extends React.Component {
189
166
  delete iosContent.cuid;
190
167
  delete iosContent.luid;
191
168
  delete iosContent.communicationId;
192
- const custom = {};
193
- forEach(iosContent.custom, (customKeyValue) => {
194
- custom[customKeyValue.key] = customKeyValue.value;
195
- } );
196
- iosContent.custom = custom;
197
169
  templateData.iosContent = iosContent;
198
170
  templateData.iosContent.type = get(mobilpushTemplate, 'definition.mode').toUpperCase();
199
171
  templateData.iosContent.deviceType = 'IOS';
@@ -257,19 +229,15 @@ class Creatives extends React.Component {
257
229
  };
258
230
  shouldShowFooter = () => {
259
231
  const {isFullMode } = this.props;
260
- const {slidBoxContent, currentChannel, emailCreateMode, templateStep, mobilePushCreateMode} = this.state;
232
+ const {slidBoxContent, currentChannel, emailCreateMode, templateStep} = this.state;
261
233
  const channel = currentChannel.toUpperCase();
262
234
  const currentStep = this.creativesTemplateSteps[templateStep];
263
235
  let showFooter = false;
264
- const isMobilepush = channel === constants.MOBILE_PUSH;
265
236
  if (!isFullMode ) {
266
237
  const isEmailCreate = slidBoxContent === 'createTemplate' && channel === constants.EMAIL && currentStep !== 'createTemplateContent';
267
238
  const isCreate = (slidBoxContent === 'editTemplate' || slidBoxContent === 'createTemplate') && !isEmailCreate;
268
- const isCallTask = channel === 'CALLTASK';
239
+ const isCallTask = channel === constants.CALL_TASK;
269
240
  showFooter = (isCreate || (isEmailCreate && emailCreateMode) || slidBoxContent === 'preview') && !isCallTask;
270
- if (isMobilepush) {
271
- showFooter = currentStep === "modeSelection" || (currentStep === 'createTemplateContent' && !isEmpty(mobilePushCreateMode));
272
- }
273
241
  } else if (channel === constants.EMAIL && isFullMode) {
274
242
  const isEmailCreate = slidBoxContent === 'createTemplate' && channel === constants.EMAIL && currentStep !== 'createTemplateContent';
275
243
  showFooter = isEmailCreate && emailCreateMode;
@@ -289,36 +257,23 @@ class Creatives extends React.Component {
289
257
  shouldShowDoneFooter = () => {
290
258
  const {slidBoxContent, templateStep, currentChannel} = this.state;
291
259
  const currentStep = this.creativesTemplateSteps[templateStep];
292
- let showDone = false;
293
- const channel = currentChannel.toUpperCase();
294
- if (channel === constants.EMAIL || channel === constants.SMS) {
295
- const isEmailCreate = slidBoxContent === 'createTemplate' && currentChannel.toUpperCase() === constants.EMAIL && currentStep !== 'createTemplateContent';
296
- showDone = (slidBoxContent === 'editTemplate' || slidBoxContent === 'createTemplate') && !isEmailCreate;
297
- } else if (channel === constants.MOBILE_PUSH) {
298
- showDone = currentStep === "createTemplateContent" || slidBoxContent === "editTemplate";
299
- }
300
-
301
- return showDone;
260
+ const isEmailCreate = slidBoxContent === 'createTemplate' && currentChannel.toUpperCase() === constants.EMAIL && currentStep !== 'createTemplateContent';
261
+ const isCreate = (slidBoxContent === 'editTemplate' || slidBoxContent === 'createTemplate') && !isEmailCreate;
262
+ return isCreate;
302
263
  }
303
264
  shouldShowContinueFooter = () => { // only for email for now, has to be modified according to channel
304
- const {slidBoxContent, templateStep, currentChannel, emailCreateMode, mobilePushCreateMode} = this.state;
265
+ const {slidBoxContent, templateStep, currentChannel, emailCreateMode} = this.state;
305
266
  let isShowContinueFooter = false;
306
- const currentStep = this.creativesTemplateSteps[templateStep];
307
- const channel = currentChannel.toUpperCase();
308
- if (channel === constants.EMAIL || channel === constants.SMS) {
309
- if ((emailCreateMode === "upload" && !isEmpty(this.props.EmailLayout)) || emailCreateMode === "editor") {
310
- let isEmailCreate = slidBoxContent === 'createTemplate';
311
- isEmailCreate = currentChannel.toUpperCase() === constants.EMAIL && ((emailCreateMode === "upload" && currentStep !== 'createTemplateContent') || ( emailCreateMode === "editor" && currentStep !== 'createTemplateContent' && currentStep !== "templateSelection"));
312
- isShowContinueFooter = isEmailCreate && emailCreateMode;
313
- }
314
- } else if (currentChannel.toUpperCase() === constants.MOBILE_PUSH) {
315
- isShowContinueFooter = !isEmpty(mobilePushCreateMode) && currentStep === "modeSelection";
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;
316
272
  }
317
-
318
273
  return isShowContinueFooter;
319
274
  }
320
275
  render() {
321
- const {slidBoxContent, isGetFormData, showSlideBox, templateData, currentChannel, emailCreateMode, templateStep, isLoadingContent, mobilePushCreateMode} = this.state;
276
+ const {slidBoxContent, isGetFormData, showSlideBox, templateData, currentChannel, emailCreateMode, templateStep, isLoadingContent} = this.state;
322
277
  const {isFullMode, creativesMode, cap, isUploading} = this.props;
323
278
  return (
324
279
  <div className={classnames(`${classPrefix} ${isFullMode ? 'creatives-full-mode' : 'creatives-library-mode'}`)}>
@@ -353,12 +308,10 @@ class Creatives extends React.Component {
353
308
  onEmailModeChange={this.onEmailModeChange}//used when create is clicked in email
354
309
  emailCreateMode={emailCreateMode}// upload zip || use editor are values
355
310
  templateStep={this.creativesTemplateSteps[templateStep]}
356
- onCreateNextStep={this.onCreateNextStep}
311
+ onEmailNextStep={this.onEmailNextStep}
357
312
  onResetStep={this.resetStep}
358
313
  cap={cap}
359
314
  setIsLoadingContent={this.setIsLoadingContent}
360
- onMobilepushModeChange={this.onMobilepushModeChange}
361
- mobilePushCreateMode={mobilePushCreateMode}
362
315
  />
363
316
  }
364
317
  footer={this.shouldShowFooter() &&
@@ -367,7 +320,7 @@ class Creatives extends React.Component {
367
320
  onSave={this.saveMessage}
368
321
  onEditTemplate={this.onEditTemplate}
369
322
  slidBoxContent={slidBoxContent}
370
- onCreateNextStep={this.onCreateNextStep}
323
+ onEmailNextStep={this.onEmailNextStep}
371
324
  currentChannel={currentChannel.toUpperCase()}
372
325
  templateStep={this.creativesTemplateSteps[templateStep]}
373
326
  emailCreateMode={emailCreateMode}
@@ -504,12 +504,10 @@ 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);
508
507
  const response = {
509
508
  action: "getFormData",
510
- value: templateData,
509
+ value: this.getTransformedData(this.state.formData),
511
510
  validity: this.state.isFormValid,
512
- type: templateData.type,
513
511
  };
514
512
  this.setState({checkValidation: true});
515
513
  if (e) {
@@ -2218,7 +2216,7 @@ export class Create extends React.Component { // eslint-disable-line react/prefe
2218
2216
  injectedTags={this.state.injectedTags ? this.state.injectedTags : {}}
2219
2217
  onFormValidityChange={this.setFormValidity}
2220
2218
  usingTabContainer
2221
- checkValidation={this.state.checkValidation}
2219
+ checkValidation={false}
2222
2220
  iosCtasData={this.state.iosCtasData}
2223
2221
  tabKey={this.state.tabKey}
2224
2222
  tabCount={2}
@@ -11,7 +11,7 @@
11
11
 
12
12
  #template-name.ant-input{
13
13
  font-size: 20px !important;
14
- font-family: proxima-nova, sans-serif;
14
+ // font-family: proxima-nova, sans-serif;
15
15
  font-style: normal;
16
16
  font-weight: 600;
17
17
  }
@@ -50,14 +50,16 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
50
50
  constructor(props) {
51
51
  super(props);
52
52
  const defaultChannel = get(this, 'props.channel') || get(this, 'props.params.channel') || 'sms';
53
- const deafaultPanes = [
53
+ const defaultPanes = [
54
54
  {content: <div></div>, tab: 'Sms', key: 'sms'},
55
55
  {content: <div></div>, tab: 'Email', key: 'email'},
56
- {content: <div></div>, tab: 'Call Task', key: 'calltask'},
57
56
  // {content: this.getTemplatesComponent('wechat'), tab: 'Wechat', key: 'wechat'},
58
57
  {content: <div></div>, tab: 'Mpush', key: 'mobilepush'},
59
58
  ];
60
- const panes = this.setChannelContent(defaultChannel, deafaultPanes);
59
+ if (!props.isFullMode) {
60
+ defaultPanes.push({content: <div></div>, tab: 'Call Task', key: 'call_task'});
61
+ }
62
+ const panes = this.setChannelContent(defaultChannel, defaultPanes);
61
63
  this.state = {
62
64
  selectedChannel: defaultChannel,
63
65
  panes,
@@ -105,7 +107,7 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
105
107
  if (!this.props.isFullMode) {
106
108
  query = {type: 'embedded', module: 'library'};
107
109
  }
108
- return (channel === 'calltask' ?
110
+ return (channel === 'call_task' ?
109
111
  this.getCallTaskComponent() :
110
112
  <Templates
111
113
  key={channel}
@@ -124,13 +126,10 @@ export class TemplatesV2 extends React.Component { // eslint-disable-line react/
124
126
  const panes = argsPanes.map((p) => {
125
127
  const pane = p;
126
128
  if (pane.key === selectedChannel) {
127
- let channel = pane.tab.toLowerCase();
129
+ let channel = selectedChannel;
128
130
  if (channel === "mpush") {
129
131
  channel = "mobilepush";
130
132
  }
131
- if (channel === 'call task') {
132
- channel = "calltask";
133
- }
134
133
  pane.content = this.getTemplatesComponent(channel);
135
134
  return pane;
136
135
  }
package/global-styles.js CHANGED
@@ -6,6 +6,7 @@ injectGlobal`
6
6
  body {
7
7
  height: 100%;
8
8
  width: 100%;
9
+ font-family: 'Roboto', open-sans, sans-serif !important;
9
10
  }
10
11
 
11
12
  #app {
package/index.html CHANGED
@@ -9,6 +9,8 @@
9
9
  <meta name="mobile-web-app-capable" content="yes">
10
10
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
11
11
  <script src="https://use.typekit.net/ifw1ntv.js"></script>
12
+ <!-- Roboto Font -->
13
+ <link href="https://fonts.googleapis.com/css?family=Roboto:400,500" rel="stylesheet">
12
14
  <!-- Google Tag Manager -->
13
15
  <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
14
16
  new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
package/index.js CHANGED
@@ -75,7 +75,7 @@ export {default as EmailPreview} from './components/EmailPreview';
75
75
  export {default as EmailPreviewV2} from './components/EmailPreviewV2';
76
76
  export {default as CallTaskPreview} from './components/CallTaskPreview';
77
77
  export {default as EmailMobilePreview} from './components/EmailMobilePreview';
78
- export {default as MobilePushPreview} from './components/MobilePushPreviewV2';
78
+
79
79
  CreativesContainer.CreativesContainerReducer = CreativesContainerReducer;
80
80
 
81
81
  export { CapContainer,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capillarytech/creatives-library",
3
3
  "author": "meharaj",
4
- "version": "2.0.61",
4
+ "version": "2.0.62",
5
5
  "description": "Capillary creatives ui",
6
6
  "main": "./index.js",
7
7
  "module": "./index.es.js",
@@ -1,10 +0,0 @@
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>