aboutsummaryrefslogtreecommitdiffstats
path: root/src/features/announcements/Component.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/features/announcements/Component.js')
-rw-r--r--src/features/announcements/Component.js77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/features/announcements/Component.js b/src/features/announcements/Component.js
new file mode 100644
index 000000000..5d95f5d84
--- /dev/null
+++ b/src/features/announcements/Component.js
@@ -0,0 +1,77 @@
1import React, { Component } from 'react';
2import marked from 'marked';
3import PropTypes from 'prop-types';
4import { inject, observer } from 'mobx-react';
5import { defineMessages, intlShape } from 'react-intl';
6import injectSheet from 'react-jss';
7import { themeSidebarWidth } from '@meetfranz/theme/lib/themes/legacy';
8import state from './state';
9
10const messages = defineMessages({
11 headline: {
12 id: 'feature.announcements.headline',
13 defaultMessage: '!!!What\'s new in Franz {version}?',
14 },
15});
16
17const styles = theme => ({
18 container: {
19 background: theme.colorBackground,
20 position: 'absolute',
21 top: 0,
22 zIndex: 140,
23 width: `calc(100% - ${themeSidebarWidth})`,
24 display: 'flex',
25 'flex-direction': 'column',
26 'align-items': 'center',
27 'justify-content': 'center',
28 },
29 headline: {
30 color: theme.colorHeadline,
31 margin: [25, 0, 40],
32 'max-width': 500,
33 'text-align': 'center',
34 'line-height': '1.3em',
35 },
36 body: {
37 '& h3': {
38 fontSize: '24px',
39 margin: '1.5em 0 1em 0',
40 },
41 '& li': {
42 marginBottom: '1em',
43 },
44 },
45});
46
47
48@inject('actions') @injectSheet(styles) @observer
49class AnnouncementScreen extends Component {
50 static propTypes = {
51 classes: PropTypes.object.isRequired,
52 };
53
54 static contextTypes = {
55 intl: intlShape,
56 };
57
58 render() {
59 const { classes } = this.props;
60 const { intl } = this.context;
61 return (
62 <div className={`${classes.container}`}>
63 <h1 className={classes.headline}>
64 {intl.formatMessage(messages.headline, { version: state.currentVersion })}
65 </h1>
66 <div
67 className={classes.body}
68 dangerouslySetInnerHTML={{
69 __html: marked(state.announcement, { sanitize: true }),
70 }}
71 />
72 </div>
73 );
74 }
75}
76
77export default AnnouncementScreen;