@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.
- package/components/CmsTemplatesComponent/index.js +33 -0
- package/components/CmsTemplatesComponent/messages.js +17 -0
- package/components/CmsTemplatesComponent/tests/index.test.js +10 -0
- package/containers/CreativesContainer/SlideBoxContent.js +17 -2
- package/containers/CreativesContainer/SlideBoxFooter.js +18 -11
- package/containers/CreativesContainer/index.js +16 -3
- package/containers/CreativesContainer/messages.js +17 -0
- package/containers/Email/index.js +119 -222
- package/containers/EmailWrapper/actions.js +15 -0
- package/containers/EmailWrapper/constants.js +7 -0
- package/containers/EmailWrapper/index.js +187 -0
- package/containers/EmailWrapper/messages.js +37 -0
- package/containers/EmailWrapper/reducer.js +23 -0
- package/containers/EmailWrapper/sagas.js +11 -0
- package/containers/EmailWrapper/selectors.js +25 -0
- package/containers/EmailWrapper/tests/actions.test.js +18 -0
- package/containers/EmailWrapper/tests/index.test.js +10 -0
- package/containers/EmailWrapper/tests/reducer.test.js +9 -0
- package/containers/EmailWrapper/tests/sagas.test.js +15 -0
- package/containers/EmailWrapper/tests/selectors.test.js +10 -0
- package/containers/Templates/messages.js +4 -0
- package/containers/Templates/selectors.js +21 -1
- package/package.json +1 -1
|
@@ -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
|
-
|
|
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
|
|
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
|
-
{(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
+
});
|