@capillarytech/creatives-library 2.0.26 → 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' };
@@ -43,11 +47,10 @@ function SlideBoxContent(props) {
43
47
  let isEmailEditWithContent = false;
44
48
  let isPreview = false;
45
49
  let isEmailPreview = false;
46
- //let isEmailCreate = false;
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,15 +113,21 @@ 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(
118
125
  {
119
126
  isGetFormData: false,
120
- templateData: template,
121
127
  },
122
128
  () => {
123
- 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;
124
131
  const creativesData = this.getCreativesData(channel, template);// convers data to consumer understandable format
125
132
  this.props.getCreativesData(creativesData);// send data to consumer
126
133
  },
@@ -136,8 +143,9 @@ class Creatives extends React.Component {
136
143
  saveMessage = () => {
137
144
  this.setState({ isGetFormData: true });
138
145
  };
146
+
139
147
  render() {
140
- const {slidBoxContent, isGetFormData, showSlideBox, templateData, currentChannel} = this.state;
148
+ const {slidBoxContent, isGetFormData, showSlideBox, templateData, currentChannel, emailCreateMode, emailStep} = this.state;
141
149
  const {isFullMode} = this.props;
142
150
  return (
143
151
  <div className={classnames(`${classPrefix}`)}>
@@ -166,6 +174,9 @@ class Creatives extends React.Component {
166
174
  isFullMode={isFullMode}
167
175
  currentChannel={currentChannel.toUpperCase()}
168
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}
169
180
  />
170
181
  }
171
182
  footer={
@@ -174,6 +185,8 @@ class Creatives extends React.Component {
174
185
  onSave={this.saveMessage}
175
186
  onEditTemplate={this.onEditTemplate}
176
187
  slidBoxContent={slidBoxContent}
188
+ onEmailNextStep={this.onEmailNextStep}
189
+ currentChannel={currentChannel.toUpperCase()}
177
190
  />
178
191
  }
179
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
+ });