@capillarytech/creatives-library 2.0.25 → 2.0.27

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,33 @@
1
+ /**
2
+ *
3
+ * CmsTemplatesComponent
4
+ *
5
+ */
6
+
7
+ import React from 'react';
8
+ import PropTypes from 'prop-types';
9
+ // import styled from 'styled-components';
10
+ import {CapButton, CapCustomCard} from '@capillarytech/cap-ui-library';
11
+ import { FormattedMessage } from 'react-intl';
12
+ import messages from './messages';
13
+ const {CapCustomCardList} = CapCustomCard;
14
+ function CmsTemplatesComponent(props) {
15
+ const cardDataList = props.cmsTemplates.map((template) => (
16
+ {
17
+ title: template.name,
18
+ content: template.versions.base.preview_http_url,
19
+ hoverOption: <CapButton onClick={() => props.handleEdmDefaultTemplateSelection(template._id)}><FormattedMessage {...messages.select}/></CapButton>,
20
+ }));
21
+ return (<div>
22
+ <div className="pagination-container">
23
+ <CapCustomCardList cardList={cardDataList} type="SMS" />
24
+ </div>
25
+ </div>);
26
+ }
27
+
28
+ CmsTemplatesComponent.propTypes = {
29
+ cmsTemplates: PropTypes.array,
30
+ handleEdmDefaultTemplateSelection: PropTypes.func,
31
+ };
32
+
33
+ export default CmsTemplatesComponent;
@@ -0,0 +1,17 @@
1
+ /*
2
+ * CmsTemplatesComponent Messages
3
+ *
4
+ * This contains all the text for the CmsTemplatesComponent component.
5
+ */
6
+ import { defineMessages } from 'react-intl';
7
+
8
+ export default defineMessages({
9
+ header: {
10
+ id: 'app.components.CmsTemplatesComponent.header',
11
+ defaultMessage: 'This is the CmsTemplatesComponent component !',
12
+ },
13
+ select: {
14
+ id: 'app.components.CmsTemplatesComponent.select',
15
+ defaultMessage: 'Select',
16
+ },
17
+ });
@@ -0,0 +1,10 @@
1
+ // import React from 'react';
2
+ // import { shallow } from 'enzyme';
3
+
4
+ // import CmsTemplatesComponent from '../index';
5
+
6
+ describe('<CmsTemplatesComponent />', () => {
7
+ it('Expect to have unit tests specified', () => {
8
+ expect(true).toEqual(false);
9
+ });
10
+ });
@@ -6,6 +6,7 @@ import TemplatePreview from '../../components/TemplatePreview';
6
6
  import SmsCreate from '../Sms/Create';
7
7
  import SmsEdit from '../Sms/Edit';
8
8
  import Email from '../Email';
9
+ import EmailWrapper from '../EmailWrapper';
9
10
  import EmailPreviewV2 from '../../components/EmailPreviewV2';
10
11
  import * as constants from './constants';
11
12
  const CreativesWrapper = styled.div`
@@ -28,6 +29,9 @@ function SlideBoxContent(props) {
28
29
  onCreateNew,
29
30
  currentChannel,
30
31
  onChannelChange,
32
+ onEmailModeChange,
33
+ emailCreateMode,
34
+ emailStep,
31
35
  } = props;
32
36
  const type = messageDetails.type.toLowerCase(); // type is context in get tags values : outbound | dvs | referral | loyalty | coupons
33
37
  const query = { type: 'embedded', module: 'library' };
@@ -36,18 +40,17 @@ function SlideBoxContent(props) {
36
40
  query,
37
41
  search: '',
38
42
  };
43
+ let channel = currentChannel;//for create mode
39
44
  const isCreateSms = slidBoxContent === 'createTemplate' && channel === constants.SMS;
40
45
  let isEditSms = false;
41
46
  let isEditEmailWithId = false;
42
47
  let isEmailEditWithContent = false;
43
48
  let isPreview = false;
44
49
  let isEmailPreview = false;
45
- //let isEmailCreate = false;
46
- let channel = currentChannel;//for create mode
50
+ const isEmailCreate = slidBoxContent === 'createTemplate' && channel === constants.EMAIL;
47
51
  if (templateData && channel) {
48
52
  channel = templateData.type;// for edit mode with template data
49
53
  isEditSms = slidBoxContent === 'editTemplate' && channel === constants.SMS;
50
- //isEmailCreate = slidBoxContent === 'createTemplate' && channel === constants.EMAIL;
51
54
  isEditEmailWithId = slidBoxContent === 'editTemplate' && channel === constants.EMAIL && templateData._id;
52
55
  isEmailEditWithContent = slidBoxContent === 'editTemplate' && channel === constants.EMAIL && !templateData._id;
53
56
  isPreview = slidBoxContent === 'preview' && channel !== constants.EMAIL;
@@ -100,6 +103,18 @@ function SlideBoxContent(props) {
100
103
  getDefaultTags={type}
101
104
  />
102
105
  )}
106
+ {isEmailCreate && (
107
+ <EmailWrapper
108
+ onEmailModeChange={onEmailModeChange}
109
+ emailCreateMode={emailCreateMode}
110
+ isGetFormData={isGetFormData}
111
+ getFormdata={getFormData}
112
+ templateData={templateData}
113
+ getFormSubscriptionData={getFormData}
114
+ getDefaultTags={type}
115
+ step={emailStep}
116
+ />
117
+ )}
103
118
  {(isEditEmailWithId || isEmailEditWithContent) && (
104
119
  <Email
105
120
  location={{
@@ -2,18 +2,23 @@ import React from 'react';
2
2
  import { FormattedMessage } from 'react-intl';
3
3
  import { CapButton } from '@capillarytech/cap-ui-library';
4
4
  import PropTypes from 'prop-types';
5
-
6
- function SlideBoxHeader(props) {
7
- const { slidBoxContent, onSave, messages, onEditTemplate } = props;
8
-
5
+ import * as constants from './constants';
6
+ function SlideBoxFooter(props) {
7
+ const { slidBoxContent, onSave, messages, onEditTemplate, currentChannel, onEmailNextStep } = props;
8
+ const isEmailCreate = slidBoxContent === 'createTemplate' && currentChannel === constants.EMAIL;
9
+ const isCreate = (slidBoxContent === 'editTemplate' || slidBoxContent === 'createTemplate') && !isEmailCreate;
9
10
  return (
10
11
  <div>
11
- {(slidBoxContent === 'editTemplate' ||
12
- slidBoxContent === 'createTemplate') && (
13
- <CapButton onClick={onSave}>
14
- <FormattedMessage {...messages.creativesTemplatesSave} />
15
- </CapButton>
12
+ {(isCreate) && (
13
+ <CapButton onClick={onSave}>
14
+ <FormattedMessage {...messages.creativesTemplatesSave} />
15
+ </CapButton>
16
16
  )}
17
+ {slidBoxContent &&
18
+ <CapButton onClick={onEmailNextStep}>
19
+ <FormattedMessage {...messages.continue} />
20
+ </CapButton>
21
+ }
17
22
  {slidBoxContent === 'preview' && (
18
23
  <CapButton onClick={onEditTemplate} type="secondary">
19
24
  <FormattedMessage {...messages.creativesTemplatesEdit} />
@@ -22,10 +27,12 @@ function SlideBoxHeader(props) {
22
27
  </div>
23
28
  );
24
29
  }
25
- SlideBoxHeader.propTypes = {
30
+ SlideBoxFooter.propTypes = {
26
31
  slidBoxContent: PropTypes.node,
27
32
  onSave: PropTypes.func,
28
33
  messages: PropTypes.object,
29
34
  onEditTemplate: PropTypes.func,
35
+ currentChannel: PropTypes.string,
36
+ onEmailNextStep: PropTypes.func,
30
37
  };
31
- export default SlideBoxHeader;
38
+ export default SlideBoxFooter;
@@ -21,6 +21,7 @@ class Creatives extends React.Component {
21
21
  constructor(props) {
22
22
  super(props);
23
23
  this.state = {
24
+ emailStep: 'modeSelection', //modeSelection: for selecting upload or editor, and createTemplate to create template create based on modeSelection
24
25
  showSlideBox: true,
25
26
  slidBoxContent: this.getSlideBocContent({mode: props.creativesMode, templateData: props.templateData, isFullMode: props.isFullMode}),
26
27
  templateData: this.getTemplateData(props.templateData),
@@ -112,6 +113,12 @@ class Creatives extends React.Component {
112
113
  }
113
114
  return creativesMode;
114
115
  }
116
+ onEmailModeChange = (mode) => {
117
+ this.setState({ emailCreateMode: mode});
118
+ }
119
+ onEmailNextStep = (step) => {
120
+ this.setState({emailStep: step });
121
+ }
115
122
  getFormData = (template) => {
116
123
  if (template.validity) {
117
124
  this.setState(
@@ -119,7 +126,8 @@ class Creatives extends React.Component {
119
126
  isGetFormData: false,
120
127
  },
121
128
  () => {
122
- const channel = this.state.templateData.type;
129
+ const templateData = this.state.templateData ? this.state.templateData : template; //select existing or create new content
130
+ const channel = templateData.type;
123
131
  const creativesData = this.getCreativesData(channel, template);// convers data to consumer understandable format
124
132
  this.props.getCreativesData(creativesData);// send data to consumer
125
133
  },
@@ -135,8 +143,9 @@ class Creatives extends React.Component {
135
143
  saveMessage = () => {
136
144
  this.setState({ isGetFormData: true });
137
145
  };
146
+
138
147
  render() {
139
- const {slidBoxContent, isGetFormData, showSlideBox, templateData, currentChannel} = this.state;
148
+ const {slidBoxContent, isGetFormData, showSlideBox, templateData, currentChannel, emailCreateMode, emailStep} = this.state;
140
149
  const {isFullMode} = this.props;
141
150
  return (
142
151
  <div className={classnames(`${classPrefix}`)}>
@@ -165,6 +174,9 @@ class Creatives extends React.Component {
165
174
  isFullMode={isFullMode}
166
175
  currentChannel={currentChannel.toUpperCase()}
167
176
  onChannelChange={this.onChannelChange}
177
+ onEmailModeChange={this.onEmailModeChange}//used when create is clicked in email
178
+ emailCreateMode={emailCreateMode}// upload zip || use editor are values
179
+ emailStep={emailStep}
168
180
  />
169
181
  }
170
182
  footer={
@@ -173,6 +185,8 @@ class Creatives extends React.Component {
173
185
  onSave={this.saveMessage}
174
186
  onEditTemplate={this.onEditTemplate}
175
187
  slidBoxContent={slidBoxContent}
188
+ onEmailNextStep={this.onEmailNextStep}
189
+ currentChannel={currentChannel.toUpperCase()}
176
190
  />
177
191
  }
178
192
  handleClose={this.toggleShowSlideBox}
@@ -0,0 +1,17 @@
1
+ /*
2
+ * EmailWrapper Messages
3
+ *
4
+ * This contains all the text for the EmailWrapper component.
5
+ */
6
+ import { defineMessages } from 'react-intl';
7
+
8
+ export default defineMessages({
9
+ header: {
10
+ id: 'app.containers.EmailWrapper.header',
11
+ defaultMessage: 'This is EmailWrapper container !',
12
+ },
13
+ continue: {
14
+ id: 'app.containers.EmailWrapper.continue',
15
+ defaultMessage: 'Continue',
16
+ },
17
+ });