@plusscommunities/pluss-newsletter-web-sharing 1.2.8
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/.babelrc +3 -0
- package/dist/index.cjs.js +7451 -0
- package/dist/index.esm.js +7399 -0
- package/dist/index.umd.js +7434 -0
- package/package.default.json +43 -0
- package/package.json +45 -0
- package/package.test.json +43 -0
- package/rollup.config.js +59 -0
- package/src/actions/NewsActions.js +102 -0
- package/src/actions/index.js +9 -0
- package/src/actions/types.js +10 -0
- package/src/components/ActivityText.js +73 -0
- package/src/components/MakerPopup/index.js +3 -0
- package/src/components/PreviewFull.js +32 -0
- package/src/components/PreviewGrid.js +19 -0
- package/src/components/PreviewWidget.js +28 -0
- package/src/components/Reactions/index.js +3 -0
- package/src/components/ViewFull.js +19 -0
- package/src/components/ViewWidget.js +17 -0
- package/src/components/index.js +25 -0
- package/src/components/text/index.js +4 -0
- package/src/config/index.js +9 -0
- package/src/feature.config.default.js +235 -0
- package/src/feature.config.js +235 -0
- package/src/feature.config.sharing.js +235 -0
- package/src/feature.config.test.js +235 -0
- package/src/helper/index.js +17 -0
- package/src/images/full.png +0 -0
- package/src/images/fullNoTitle.png +0 -0
- package/src/images/fullNoTitleCondensed.png +0 -0
- package/src/images/previewWidget.png +0 -0
- package/src/images/widget.png +0 -0
- package/src/index.js +33 -0
- package/src/js/Events.js +26 -0
- package/src/js/index.js +20 -0
- package/src/reducers/NewsReducer.js +82 -0
- package/src/screens/Newsletter/AddNewsletterEntry.js +1186 -0
- package/src/screens/Newsletter/AvailableNews.js +124 -0
- package/src/screens/Newsletter/GenerateNewsletter.js +891 -0
- package/src/screens/Newsletter/ListNewsletterEntries.js +234 -0
- package/src/screens/Newsletter/NewsHub.js +328 -0
- package/src/screens/Newsletter/NewsHubAnalytics.js +320 -0
- package/src/screens/Newsletter/NewsletterAnalytics.js +140 -0
- package/src/screens/Newsletter/NewsletterSubmission.js +476 -0
- package/src/screens/Newsletter/NewsletterSubmissions.js +278 -0
- package/src/screens/Newsletter/NewsletterTemplate.js +1051 -0
- package/src/screens/Newsletter/PublishAvailableNews.js +450 -0
- package/src/session/index.js +7 -0
- package/src/webapi/eventActions.js +18 -0
- package/src/webapi/helper.js +4 -0
- package/src/webapi/index.js +11 -0
- package/src/webapi/newsletterActions.js +153 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import React, { Component } from 'react';
|
|
2
|
+
import { connect } from 'react-redux';
|
|
3
|
+
import moment from 'moment';
|
|
4
|
+
import _ from 'lodash';
|
|
5
|
+
import { withRouter } from 'react-router';
|
|
6
|
+
import FontAwesome from 'react-fontawesome';
|
|
7
|
+
import { newsLoaded, removeNews } from '../../actions';
|
|
8
|
+
import { newsletterActions } from '../../webapi';
|
|
9
|
+
import { checkLoggedIn } from '../../session';
|
|
10
|
+
import { COLOUR_BRANDING_OFF } from '../../js';
|
|
11
|
+
import { values } from '../../feature.config';
|
|
12
|
+
|
|
13
|
+
class ListNewsletter extends Component {
|
|
14
|
+
state = {
|
|
15
|
+
newsletterEntries: [],
|
|
16
|
+
sortColumn: 'DateUnix', // column to sort by
|
|
17
|
+
sortDesc: false, // if true, sort descending rather than ascending
|
|
18
|
+
now: moment.utc(),
|
|
19
|
+
onlyFuture: true,
|
|
20
|
+
selectedId: '',
|
|
21
|
+
checkingPublished: false,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
UNSAFE_componentWillMount() {
|
|
25
|
+
checkLoggedIn(this, this.props.auth);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
componentDidMount() {
|
|
29
|
+
this.getData();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
getData() {
|
|
33
|
+
newsletterActions.getAvailableNews().then((res) => {
|
|
34
|
+
this.setState({
|
|
35
|
+
newsletterEntries: res.data,
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
sortByCol(col) {
|
|
41
|
+
if (this.state.sortColumn === col) {
|
|
42
|
+
this.setState({
|
|
43
|
+
sortDesc: !this.state.sortDesc,
|
|
44
|
+
});
|
|
45
|
+
} else {
|
|
46
|
+
this.setState({
|
|
47
|
+
sortColumn: col,
|
|
48
|
+
sortDesc: false,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
openContent = (e) => {
|
|
54
|
+
const selectedId = e.target.id;
|
|
55
|
+
this.setState({ checkingPublished: true, selectedId });
|
|
56
|
+
newsletterActions.getPublishedAvailableNews(this.props.auth.site, selectedId).then((res) => {
|
|
57
|
+
this.setState({ checkingPublished: false, selectedId: '' }, () => {
|
|
58
|
+
if (res.data && res.data.length > 0) {
|
|
59
|
+
if (!window.confirm(values.textThisPostHasPreviouslyBeenPublished)) return;
|
|
60
|
+
}
|
|
61
|
+
this.props.history.push(`${values.routePublishAvailableNews}${selectedId}`);
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
renderItem(n) {
|
|
67
|
+
const { checkingPublished, selectedId } = this.state;
|
|
68
|
+
return (
|
|
69
|
+
<div className="newsTile" key={n.RowId}>
|
|
70
|
+
<div className="newsTile_image" style={{ backgroundImage: `url(${n.Image})` }}></div>
|
|
71
|
+
<div className="newsTile_bottom">
|
|
72
|
+
<div className="newsTile_tagDate">
|
|
73
|
+
<p className="newsTile_date">{moment.utc(n.Timestamp).local().format('DD-MM-YYYY')}</p>
|
|
74
|
+
<p className="newsTile_tag"></p>
|
|
75
|
+
</div>
|
|
76
|
+
<a onClick={this.openContent} id={n.RowId} className="newsTile_title">
|
|
77
|
+
{n.Title}
|
|
78
|
+
</a>
|
|
79
|
+
{checkingPublished && selectedId === n.RowId && <FontAwesome style={styles.spinner} name="spinner fa-pulse fa-fw" />}
|
|
80
|
+
{n.Publisher && <p className="newsTile_publisher">{n.Publisher.Title}</p>}
|
|
81
|
+
{n.Publisher && <img src={n.Publisher.Image} alt="Publisher" className="newsTile_publisherImage" />}
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
renderContent() {
|
|
88
|
+
let source = _.sortBy(this.state.newsletterEntries, this.state.sortColumn);
|
|
89
|
+
if (this.state.sortDesc) {
|
|
90
|
+
source.reverse();
|
|
91
|
+
}
|
|
92
|
+
source = _.filter(source, (ev) => {
|
|
93
|
+
if (!ev) {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
return true;
|
|
97
|
+
});
|
|
98
|
+
return source.map((n) => {
|
|
99
|
+
return this.renderItem(n);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
render() {
|
|
104
|
+
return <div style={{ minWidth: '100%' }}>{this.renderContent()}</div>;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const styles = {
|
|
109
|
+
spinner: {
|
|
110
|
+
marginLeft: 2,
|
|
111
|
+
fontSize: 18,
|
|
112
|
+
color: COLOUR_BRANDING_OFF,
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
const mapStateToProps = (state) => {
|
|
117
|
+
const { auth } = state;
|
|
118
|
+
return {
|
|
119
|
+
news: state[values.reducerKey].news,
|
|
120
|
+
auth,
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
export default connect(mapStateToProps, { newsLoaded, removeNews })(withRouter(ListNewsletter));
|