@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.
- 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 +18 -3
- package/containers/CreativesContainer/SlideBoxFooter.js +18 -11
- package/containers/CreativesContainer/index.js +16 -2
- 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/Sms/Create/index.js +1 -0
- package/containers/Templates/index.js +1 -2
- 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' };
|
|
@@ -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
|
-
|
|
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
|
|
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,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
|
|
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
|
+
});
|