aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Stefan Malzner <stefan@adlk.io>2019-09-04 11:51:28 +0200
committerLibravatar Stefan Malzner <stefan@adlk.io>2019-09-04 11:51:28 +0200
commit71544483caadbdd240f423e7660c242ef458a1d2 (patch)
tree4d0d6dc345fe3c19eb2b0f2fc340d29818e098de
parentUpdate en-US.json (diff)
downloadferdium-app-71544483caadbdd240f423e7660c242ef458a1d2.tar.gz
ferdium-app-71544483caadbdd240f423e7660c242ef458a1d2.tar.zst
ferdium-app-71544483caadbdd240f423e7660c242ef458a1d2.zip
Add pre-launch notice
-rw-r--r--src/features/todos/components/TodosWebview.js104
-rw-r--r--src/features/todos/containers/TodosScreen.js19
-rw-r--r--src/features/todos/store.js1
-rw-r--r--src/features/workspaces/components/WorkspaceDrawer.js7
-rw-r--r--src/features/workspaces/components/WorkspaceSwitchingIndicator.js8
-rw-r--r--src/i18n/locales/defaultMessages.json76
-rw-r--r--src/i18n/locales/en-US.json5
-rw-r--r--src/i18n/messages/src/features/todos/components/TodosWebview.json41
-rw-r--r--src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json32
-rw-r--r--src/stores/UIStore.js1
10 files changed, 234 insertions, 60 deletions
diff --git a/src/features/todos/components/TodosWebview.js b/src/features/todos/components/TodosWebview.js
index 288c1906f..d8d96ba85 100644
--- a/src/features/todos/components/TodosWebview.js
+++ b/src/features/todos/components/TodosWebview.js
@@ -4,12 +4,31 @@ import { observer } from 'mobx-react';
4import injectSheet from 'react-jss'; 4import injectSheet from 'react-jss';
5import Webview from 'react-electron-web-view'; 5import Webview from 'react-electron-web-view';
6import { Icon } from '@meetfranz/ui'; 6import { Icon } from '@meetfranz/ui';
7import { defineMessages, intlShape } from 'react-intl';
7 8
9import { mdiChevronRight, mdiCheckAll } from '@mdi/js';
10import { Button } from '@meetfranz/forms';
8import * as environment from '../../../environment'; 11import * as environment from '../../../environment';
12import Appear from '../../../components/ui/effects/Appear';
9 13
10const OPEN_TODOS_BUTTON_SIZE = 45; 14const OPEN_TODOS_BUTTON_SIZE = 45;
11const CLOSE_TODOS_BUTTON_SIZE = 35; 15const CLOSE_TODOS_BUTTON_SIZE = 35;
12 16
17const messages = defineMessages({
18 premiumInfo: {
19 id: 'feature.todos.premium.info',
20 defaultMessage: '!!!The Franz Todos Preview is currently only available for Franz Premium accounts.',
21 },
22 upgradeCTA: {
23 id: 'feature.todos.premium.upgrade',
24 defaultMessage: '!!!Upgrade Account',
25 },
26 rolloutInfo: {
27 id: 'feature.todos.premium.rollout',
28 defaultMessage: '!!!Franz Todos will be available to everyone soon.',
29 },
30});
31
13const styles = theme => ({ 32const styles = theme => ({
14 root: { 33 root: {
15 background: theme.colorBackground, 34 background: theme.colorBackground,
@@ -78,7 +97,7 @@ const styles = theme => ({
78 bottom: 80, 97 bottom: 80,
79 right: ({ width }) => (width + -CLOSE_TODOS_BUTTON_SIZE / 2), 98 right: ({ width }) => (width + -CLOSE_TODOS_BUTTON_SIZE / 2),
80 borderRadius: CLOSE_TODOS_BUTTON_SIZE / 2, 99 borderRadius: CLOSE_TODOS_BUTTON_SIZE / 2,
81 opacity: 0, 100 opacity: ({ isTodosIncludedInCurrentPlan }) => (!isTodosIncludedInCurrentPlan ? 1 : 0),
82 transition: 'opacity 0.5s', 101 transition: 'opacity 0.5s',
83 zIndex: 600, 102 zIndex: 600,
84 display: 'flex', 103 display: 'flex',
@@ -90,6 +109,26 @@ const styles = theme => ({
90 fill: theme.todos.toggleButton.textColor, 109 fill: theme.todos.toggleButton.textColor,
91 }, 110 },
92 }, 111 },
112 premiumContainer: {
113 display: 'flex',
114 flexDirection: 'column',
115 justifyContent: 'center',
116 alignItems: 'center',
117 width: '80%',
118 maxWidth: 300,
119 margin: [-50, 'auto', 0],
120 textAlign: 'center',
121 },
122 premiumIcon: {
123 marginBottom: 40,
124 background: theme.styleTypes.primary.accent,
125 fill: theme.styleTypes.primary.contrast,
126 padding: 10,
127 borderRadius: 10,
128 },
129 premiumCTA: {
130 marginTop: 40,
131 },
93}); 132});
94 133
95@injectSheet(styles) @observer 134@injectSheet(styles) @observer
@@ -103,6 +142,8 @@ class TodosWebview extends Component {
103 resize: PropTypes.func.isRequired, 142 resize: PropTypes.func.isRequired,
104 width: PropTypes.number.isRequired, 143 width: PropTypes.number.isRequired,
105 minWidth: PropTypes.number.isRequired, 144 minWidth: PropTypes.number.isRequired,
145 isTodosIncludedInCurrentPlan: PropTypes.bool.isRequired,
146 upgradeAccount: PropTypes.func.isRequired,
106 }; 147 };
107 148
108 state = { 149 state = {
@@ -110,6 +151,10 @@ class TodosWebview extends Component {
110 width: 300, 151 width: 300,
111 }; 152 };
112 153
154 static contextTypes = {
155 intl: intlShape,
156 };
157
113 componentWillMount() { 158 componentWillMount() {
114 const { width } = this.props; 159 const { width } = this.props;
115 160
@@ -186,9 +231,20 @@ class TodosWebview extends Component {
186 231
187 render() { 232 render() {
188 const { 233 const {
189 classes, isVisible, togglePanel, 234 classes,
235 isVisible,
236 togglePanel,
237 isTodosIncludedInCurrentPlan,
238 upgradeAccount,
190 } = this.props; 239 } = this.props;
191 const { width, delta, isDragging } = this.state; 240
241 const {
242 width,
243 delta,
244 isDragging,
245 } = this.state;
246
247 const { intl } = this.context;
192 248
193 return ( 249 return (
194 <> 250 <>
@@ -203,7 +259,7 @@ class TodosWebview extends Component {
203 className={isVisible ? classes.closeTodosButton : classes.openTodosButton} 259 className={isVisible ? classes.closeTodosButton : classes.openTodosButton}
204 type="button" 260 type="button"
205 > 261 >
206 <Icon icon={isVisible ? 'mdiChevronRight' : 'mdiCheckAll'} size={2} /> 262 <Icon icon={isVisible ? mdiChevronRight : mdiCheckAll} size={2} />
207 </button> 263 </button>
208 <div 264 <div
209 className={classes.resizeHandler} 265 className={classes.resizeHandler}
@@ -216,18 +272,34 @@ class TodosWebview extends Component {
216 style={{ left: delta }} // This hack is required as resizing with webviews beneath behaves quite bad 272 style={{ left: delta }} // This hack is required as resizing with webviews beneath behaves quite bad
217 /> 273 />
218 )} 274 )}
219 <Webview 275 {isTodosIncludedInCurrentPlan ? (
220 className={classes.webview} 276 <Webview
221 onDidAttach={() => { 277 className={classes.webview}
222 const { setTodosWebview } = this.props; 278 onDidAttach={() => {
223 setTodosWebview(this.webview); 279 const { setTodosWebview } = this.props;
224 this.startListeningToIpcMessages(); 280 setTodosWebview(this.webview);
225 }} 281 this.startListeningToIpcMessages();
226 partition="persist:todos" 282 }}
227 preload="./features/todos/preload.js" 283 partition="persist:todos"
228 ref={(webview) => { this.webview = webview ? webview.view : null; }} 284 preload="./features/todos/preload.js"
229 src={environment.TODOS_FRONTEND} 285 ref={(webview) => { this.webview = webview ? webview.view : null; }}
230 /> 286 src={environment.TODOS_FRONTEND}
287 />
288 ) : (
289 <Appear>
290 <div className={classes.premiumContainer}>
291 <Icon icon={mdiCheckAll} className={classes.premiumIcon} size={5} />
292 <p>{intl.formatMessage(messages.premiumInfo)}</p>
293 <p>{intl.formatMessage(messages.rolloutInfo)}</p>
294 <Button
295 label={intl.formatMessage(messages.upgradeCTA)}
296 className={classes.premiumCTA}
297 onClick={upgradeAccount}
298 buttonType="inverted"
299 />
300 </div>
301 </Appear>
302 )}
231 </div> 303 </div>
232 </> 304 </>
233 ); 305 );
diff --git a/src/features/todos/containers/TodosScreen.js b/src/features/todos/containers/TodosScreen.js
index d071d0677..7f3688828 100644
--- a/src/features/todos/containers/TodosScreen.js
+++ b/src/features/todos/containers/TodosScreen.js
@@ -1,12 +1,14 @@
1import React, { Component } from 'react'; 1import React, { Component } from 'react';
2import { observer } from 'mobx-react'; 2import { observer, inject } from 'mobx-react';
3import PropTypes from 'prop-types';
3 4
5import FeaturesStore from '../../../stores/FeaturesStore';
4import TodosWebview from '../components/TodosWebview'; 6import TodosWebview from '../components/TodosWebview';
5import ErrorBoundary from '../../../components/util/ErrorBoundary'; 7import ErrorBoundary from '../../../components/util/ErrorBoundary';
6import { TODOS_MIN_WIDTH, todosStore } from '..'; 8import { TODOS_MIN_WIDTH, todosStore } from '..';
7import { todoActions } from '../actions'; 9import { todoActions } from '../actions';
8 10
9@observer 11@inject('stores', 'actions') @observer
10class TodosScreen extends Component { 12class TodosScreen extends Component {
11 render() { 13 render() {
12 if (!todosStore || !todosStore.isFeatureActive) { 14 if (!todosStore || !todosStore.isFeatureActive) {
@@ -23,6 +25,8 @@ class TodosScreen extends Component {
23 width={todosStore.width} 25 width={todosStore.width}
24 minWidth={TODOS_MIN_WIDTH} 26 minWidth={TODOS_MIN_WIDTH}
25 resize={width => todoActions.resize({ width })} 27 resize={width => todoActions.resize({ width })}
28 isTodosIncludedInCurrentPlan={this.props.stores.features.features.isTodosIncludedInCurrentPlan || false}
29 upgradeAccount={() => this.props.actions.ui.openSettings({ path: 'user' })}
26 /> 30 />
27 </ErrorBoundary> 31 </ErrorBoundary>
28 ); 32 );
@@ -30,3 +34,14 @@ class TodosScreen extends Component {
30} 34}
31 35
32export default TodosScreen; 36export default TodosScreen;
37
38TodosScreen.wrappedComponent.propTypes = {
39 stores: PropTypes.shape({
40 features: PropTypes.instanceOf(FeaturesStore).isRequired,
41 }).isRequired,
42 actions: PropTypes.shape({
43 ui: PropTypes.shape({
44 openSettings: PropTypes.func.isRequired,
45 }).isRequired,
46 }).isRequired,
47};
diff --git a/src/features/todos/store.js b/src/features/todos/store.js
index acf95df0d..7da3b7f49 100644
--- a/src/features/todos/store.js
+++ b/src/features/todos/store.js
@@ -29,6 +29,7 @@ export default class TodoStore extends FeatureStore {
29 } 29 }
30 30
31 @computed get isTodosPanelVisible() { 31 @computed get isTodosPanelVisible() {
32 if (this.stores.services.all.length === 0) return false;
32 if (this.settings.isTodosPanelVisible === undefined) return DEFAULT_TODOS_VISIBLE; 33 if (this.settings.isTodosPanelVisible === undefined) return DEFAULT_TODOS_VISIBLE;
33 34
34 return this.settings.isTodosPanelVisible; 35 return this.settings.isTodosPanelVisible;
diff --git a/src/features/workspaces/components/WorkspaceDrawer.js b/src/features/workspaces/components/WorkspaceDrawer.js
index 684e50dd0..e7bc0b157 100644
--- a/src/features/workspaces/components/WorkspaceDrawer.js
+++ b/src/features/workspaces/components/WorkspaceDrawer.js
@@ -7,6 +7,7 @@ import { H1, Icon, ProBadge } from '@meetfranz/ui';
7import { Button } from '@meetfranz/forms/lib'; 7import { Button } from '@meetfranz/forms/lib';
8import ReactTooltip from 'react-tooltip'; 8import ReactTooltip from 'react-tooltip';
9 9
10import { mdiPlusBox, mdiSettings } from '@mdi/js';
10import WorkspaceDrawerItem from './WorkspaceDrawerItem'; 11import WorkspaceDrawerItem from './WorkspaceDrawerItem';
11import { workspaceActions } from '../actions'; 12import { workspaceActions } from '../actions';
12import { GA_CATEGORY_WORKSPACES, workspaceStore } from '../index'; 13import { GA_CATEGORY_WORKSPACES, workspaceStore } from '../index';
@@ -159,7 +160,7 @@ class WorkspaceDrawer extends Component {
159 data-tip={`${intl.formatMessage(messages.workspacesSettingsTooltip)}`} 160 data-tip={`${intl.formatMessage(messages.workspacesSettingsTooltip)}`}
160 > 161 >
161 <Icon 162 <Icon
162 icon="mdiSettings" 163 icon={mdiSettings}
163 size={1.5} 164 size={1.5}
164 className={classes.workspacesSettingsButtonIcon} 165 className={classes.workspacesSettingsButtonIcon}
165 /> 166 />
@@ -184,7 +185,7 @@ class WorkspaceDrawer extends Component {
184 className={classes.premiumCtaButton} 185 className={classes.premiumCtaButton}
185 buttonType="primary" 186 buttonType="primary"
186 label={intl.formatMessage(messages.premiumCtaButtonLabel)} 187 label={intl.formatMessage(messages.premiumCtaButtonLabel)}
187 icon="mdiPlusBox" 188 icon={mdiPlusBox}
188 onClick={() => { 189 onClick={() => {
189 workspaceActions.openWorkspaceSettings(); 190 workspaceActions.openWorkspaceSettings();
190 gaEvent(GA_CATEGORY_WORKSPACES, 'add', 'drawerPremiumCta'); 191 gaEvent(GA_CATEGORY_WORKSPACES, 'add', 'drawerPremiumCta');
@@ -227,7 +228,7 @@ class WorkspaceDrawer extends Component {
227 }} 228 }}
228 > 229 >
229 <Icon 230 <Icon
230 icon="mdiPlusBox" 231 icon={mdiPlusBox}
231 size={1} 232 size={1}
232 className={classes.workspacesSettingsButtonIcon} 233 className={classes.workspacesSettingsButtonIcon}
233 /> 234 />
diff --git a/src/features/workspaces/components/WorkspaceSwitchingIndicator.js b/src/features/workspaces/components/WorkspaceSwitchingIndicator.js
index c4a800a7b..a70d1d66f 100644
--- a/src/features/workspaces/components/WorkspaceSwitchingIndicator.js
+++ b/src/features/workspaces/components/WorkspaceSwitchingIndicator.js
@@ -21,11 +21,8 @@ const styles = theme => ({
21 alignItems: 'flex-start', 21 alignItems: 'flex-start',
22 position: 'absolute', 22 position: 'absolute',
23 transition: 'width 0.5s ease', 23 transition: 'width 0.5s ease',
24 width: '100%',
25 marginTop: '20px',
26 },
27 wrapperWhenDrawerIsOpen: {
28 width: `calc(100% - ${theme.workspaces.drawer.width}px)`, 24 width: `calc(100% - ${theme.workspaces.drawer.width}px)`,
25 marginTop: '20px',
29 }, 26 },
30 component: { 27 component: {
31 background: 'rgba(20, 20, 20, 0.4)', 28 background: 'rgba(20, 20, 20, 0.4)',
@@ -64,14 +61,13 @@ class WorkspaceSwitchingIndicator extends Component {
64 render() { 61 render() {
65 const { classes, theme } = this.props; 62 const { classes, theme } = this.props;
66 const { intl } = this.context; 63 const { intl } = this.context;
67 const { isSwitchingWorkspace, isWorkspaceDrawerOpen, nextWorkspace } = workspaceStore; 64 const { isSwitchingWorkspace, nextWorkspace } = workspaceStore;
68 if (!isSwitchingWorkspace) return null; 65 if (!isSwitchingWorkspace) return null;
69 const nextWorkspaceName = nextWorkspace ? nextWorkspace.name : 'All services'; 66 const nextWorkspaceName = nextWorkspace ? nextWorkspace.name : 'All services';
70 return ( 67 return (
71 <div 68 <div
72 className={classnames([ 69 className={classnames([
73 classes.wrapper, 70 classes.wrapper,
74 isWorkspaceDrawerOpen ? classes.wrapperWhenDrawerIsOpen : null,
75 ])} 71 ])}
76 > 72 >
77 <div className={classes.component}> 73 <div className={classes.component}>
diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json
index 62d56ad1f..dabe2f11f 100644
--- a/src/i18n/locales/defaultMessages.json
+++ b/src/i18n/locales/defaultMessages.json
@@ -3813,6 +3813,50 @@
3813 { 3813 {
3814 "descriptors": [ 3814 "descriptors": [
3815 { 3815 {
3816 "defaultMessage": "!!!The Franz Todos Preview is currently only available for Franz Premium accounts.",
3817 "end": {
3818 "column": 3,
3819 "line": 21
3820 },
3821 "file": "src/features/todos/components/TodosWebview.js",
3822 "id": "feature.todos.premium.info",
3823 "start": {
3824 "column": 15,
3825 "line": 18
3826 }
3827 },
3828 {
3829 "defaultMessage": "!!!Upgrade Account",
3830 "end": {
3831 "column": 3,
3832 "line": 25
3833 },
3834 "file": "src/features/todos/components/TodosWebview.js",
3835 "id": "feature.todos.premium.upgrade",
3836 "start": {
3837 "column": 14,
3838 "line": 22
3839 }
3840 },
3841 {
3842 "defaultMessage": "!!!Franz Todos will be available to everyone soon.",
3843 "end": {
3844 "column": 3,
3845 "line": 29
3846 },
3847 "file": "src/features/todos/components/TodosWebview.js",
3848 "id": "feature.todos.premium.rollout",
3849 "start": {
3850 "column": 15,
3851 "line": 26
3852 }
3853 }
3854 ],
3855 "path": "src/features/todos/components/TodosWebview.json"
3856 },
3857 {
3858 "descriptors": [
3859 {
3816 "defaultMessage": "!!!Create workspace", 3860 "defaultMessage": "!!!Create workspace",
3817 "end": { 3861 "end": {
3818 "column": 3, 3862 "column": 3,
@@ -3943,104 +3987,104 @@
3943 "defaultMessage": "!!!Workspaces", 3987 "defaultMessage": "!!!Workspaces",
3944 "end": { 3988 "end": {
3945 "column": 3, 3989 "column": 3,
3946 "line": 19 3990 "line": 20
3947 }, 3991 },
3948 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 3992 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
3949 "id": "workspaceDrawer.headline", 3993 "id": "workspaceDrawer.headline",
3950 "start": { 3994 "start": {
3951 "column": 12, 3995 "column": 12,
3952 "line": 16 3996 "line": 17
3953 } 3997 }
3954 }, 3998 },
3955 { 3999 {
3956 "defaultMessage": "!!!All services", 4000 "defaultMessage": "!!!All services",
3957 "end": { 4001 "end": {
3958 "column": 3, 4002 "column": 3,
3959 "line": 23 4003 "line": 24
3960 }, 4004 },
3961 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 4005 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
3962 "id": "workspaceDrawer.allServices", 4006 "id": "workspaceDrawer.allServices",
3963 "start": { 4007 "start": {
3964 "column": 15, 4008 "column": 15,
3965 "line": 20 4009 "line": 21
3966 } 4010 }
3967 }, 4011 },
3968 { 4012 {
3969 "defaultMessage": "!!!Workspaces settings", 4013 "defaultMessage": "!!!Workspaces settings",
3970 "end": { 4014 "end": {
3971 "column": 3, 4015 "column": 3,
3972 "line": 27 4016 "line": 28
3973 }, 4017 },
3974 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 4018 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
3975 "id": "workspaceDrawer.workspacesSettingsTooltip", 4019 "id": "workspaceDrawer.workspacesSettingsTooltip",
3976 "start": { 4020 "start": {
3977 "column": 29, 4021 "column": 29,
3978 "line": 24 4022 "line": 25
3979 } 4023 }
3980 }, 4024 },
3981 { 4025 {
3982 "defaultMessage": "!!!Info about workspace feature", 4026 "defaultMessage": "!!!Info about workspace feature",
3983 "end": { 4027 "end": {
3984 "column": 3, 4028 "column": 3,
3985 "line": 31 4029 "line": 32
3986 }, 4030 },
3987 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 4031 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
3988 "id": "workspaceDrawer.workspaceFeatureInfo", 4032 "id": "workspaceDrawer.workspaceFeatureInfo",
3989 "start": { 4033 "start": {
3990 "column": 24, 4034 "column": 24,
3991 "line": 28 4035 "line": 29
3992 } 4036 }
3993 }, 4037 },
3994 { 4038 {
3995 "defaultMessage": "!!!Create your first workspace", 4039 "defaultMessage": "!!!Create your first workspace",
3996 "end": { 4040 "end": {
3997 "column": 3, 4041 "column": 3,
3998 "line": 35 4042 "line": 36
3999 }, 4043 },
4000 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 4044 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
4001 "id": "workspaceDrawer.premiumCtaButtonLabel", 4045 "id": "workspaceDrawer.premiumCtaButtonLabel",
4002 "start": { 4046 "start": {
4003 "column": 25, 4047 "column": 25,
4004 "line": 32 4048 "line": 33
4005 } 4049 }
4006 }, 4050 },
4007 { 4051 {
4008 "defaultMessage": "!!!Reactivate premium account", 4052 "defaultMessage": "!!!Reactivate premium account",
4009 "end": { 4053 "end": {
4010 "column": 3, 4054 "column": 3,
4011 "line": 39 4055 "line": 40
4012 }, 4056 },
4013 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 4057 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
4014 "id": "workspaceDrawer.reactivatePremiumAccountLabel", 4058 "id": "workspaceDrawer.reactivatePremiumAccountLabel",
4015 "start": { 4059 "start": {
4016 "column": 28, 4060 "column": 28,
4017 "line": 36 4061 "line": 37
4018 } 4062 }
4019 }, 4063 },
4020 { 4064 {
4021 "defaultMessage": "!!!add new workspace", 4065 "defaultMessage": "!!!add new workspace",
4022 "end": { 4066 "end": {
4023 "column": 3, 4067 "column": 3,
4024 "line": 43 4068 "line": 44
4025 }, 4069 },
4026 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 4070 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
4027 "id": "workspaceDrawer.addNewWorkspaceLabel", 4071 "id": "workspaceDrawer.addNewWorkspaceLabel",
4028 "start": { 4072 "start": {
4029 "column": 24, 4073 "column": 24,
4030 "line": 40 4074 "line": 41
4031 } 4075 }
4032 }, 4076 },
4033 { 4077 {
4034 "defaultMessage": "!!!Premium feature", 4078 "defaultMessage": "!!!Premium feature",
4035 "end": { 4079 "end": {
4036 "column": 3, 4080 "column": 3,
4037 "line": 47 4081 "line": 48
4038 }, 4082 },
4039 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 4083 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
4040 "id": "workspaceDrawer.proFeatureBadge", 4084 "id": "workspaceDrawer.proFeatureBadge",
4041 "start": { 4085 "start": {
4042 "column": 23, 4086 "column": 23,
4043 "line": 44 4087 "line": 45
4044 } 4088 }
4045 } 4089 }
4046 ], 4090 ],
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 727eb2884..2bfe5a670 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -15,6 +15,9 @@
15 "feature.shareFranz.shareText.email": "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com", 15 "feature.shareFranz.shareText.email": "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com",
16 "feature.shareFranz.shareText.twitter": "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger", 16 "feature.shareFranz.shareText.twitter": "I've added {count} services to Franz! Get the free app for WhatsApp, Messenger, Slack, Skype and co at www.meetfranz.com /cc @FranzMessenger",
17 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Franz is and help us to spread the word.", 17 "feature.shareFranz.text": "Tell your friends and colleagues how awesome Franz is and help us to spread the word.",
18 "feature.todos.premium.info": "The Franz Todos Preview is currently only available for Franz Premium accounts.",
19 "feature.todos.premium.rollout": "Franz Todos will be available to everyone soon.",
20 "feature.todos.premium.upgrade": "Upgrade Account",
18 "global.api.unhealthy": "Can't connect to Franz online services", 21 "global.api.unhealthy": "Can't connect to Franz online services",
19 "global.notConnectedToTheInternet": "You are not connected to the internet.", 22 "global.notConnectedToTheInternet": "You are not connected to the internet.",
20 "global.spellchecker.useDefault": "Use System Default ({default})", 23 "global.spellchecker.useDefault": "Use System Default ({default})",
@@ -371,4 +374,4 @@
371 "workspaceDrawer.workspaceFeatureInfo": "<p>Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.</p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.</p>", 374 "workspaceDrawer.workspaceFeatureInfo": "<p>Franz Workspaces let you focus on what’s important right now. Set up different sets of services and easily switch between them at any time.</p><p>You decide which services you need when and where, so we can help you stay on top of your game - or easily switch off from work whenever you want.</p>",
372 "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings", 375 "workspaceDrawer.workspacesSettingsTooltip": "Edit workspaces settings",
373 "workspaces.switchingIndicator.switchingTo": "Switching to" 376 "workspaces.switchingIndicator.switchingTo": "Switching to"
374} \ No newline at end of file 377}
diff --git a/src/i18n/messages/src/features/todos/components/TodosWebview.json b/src/i18n/messages/src/features/todos/components/TodosWebview.json
new file mode 100644
index 000000000..2387112b4
--- /dev/null
+++ b/src/i18n/messages/src/features/todos/components/TodosWebview.json
@@ -0,0 +1,41 @@
1[
2 {
3 "id": "feature.todos.premium.info",
4 "defaultMessage": "!!!The Franz Todos Preview is currently only available for Franz Premium accounts.",
5 "file": "src/features/todos/components/TodosWebview.js",
6 "start": {
7 "line": 18,
8 "column": 15
9 },
10 "end": {
11 "line": 21,
12 "column": 3
13 }
14 },
15 {
16 "id": "feature.todos.premium.upgrade",
17 "defaultMessage": "!!!Upgrade Account",
18 "file": "src/features/todos/components/TodosWebview.js",
19 "start": {
20 "line": 22,
21 "column": 14
22 },
23 "end": {
24 "line": 25,
25 "column": 3
26 }
27 },
28 {
29 "id": "feature.todos.premium.rollout",
30 "defaultMessage": "!!!Franz Todos will be available to everyone soon.",
31 "file": "src/features/todos/components/TodosWebview.js",
32 "start": {
33 "line": 26,
34 "column": 15
35 },
36 "end": {
37 "line": 29,
38 "column": 3
39 }
40 }
41] \ No newline at end of file
diff --git a/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json b/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json
index 9f0935620..2f340f1e9 100644
--- a/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json
+++ b/src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json
@@ -4,11 +4,11 @@
4 "defaultMessage": "!!!Workspaces", 4 "defaultMessage": "!!!Workspaces",
5 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 5 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
6 "start": { 6 "start": {
7 "line": 16, 7 "line": 17,
8 "column": 12 8 "column": 12
9 }, 9 },
10 "end": { 10 "end": {
11 "line": 19, 11 "line": 20,
12 "column": 3 12 "column": 3
13 } 13 }
14 }, 14 },
@@ -17,11 +17,11 @@
17 "defaultMessage": "!!!All services", 17 "defaultMessage": "!!!All services",
18 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 18 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
19 "start": { 19 "start": {
20 "line": 20, 20 "line": 21,
21 "column": 15 21 "column": 15
22 }, 22 },
23 "end": { 23 "end": {
24 "line": 23, 24 "line": 24,
25 "column": 3 25 "column": 3
26 } 26 }
27 }, 27 },
@@ -30,11 +30,11 @@
30 "defaultMessage": "!!!Workspaces settings", 30 "defaultMessage": "!!!Workspaces settings",
31 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 31 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
32 "start": { 32 "start": {
33 "line": 24, 33 "line": 25,
34 "column": 29 34 "column": 29
35 }, 35 },
36 "end": { 36 "end": {
37 "line": 27, 37 "line": 28,
38 "column": 3 38 "column": 3
39 } 39 }
40 }, 40 },
@@ -43,11 +43,11 @@
43 "defaultMessage": "!!!Info about workspace feature", 43 "defaultMessage": "!!!Info about workspace feature",
44 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 44 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
45 "start": { 45 "start": {
46 "line": 28, 46 "line": 29,
47 "column": 24 47 "column": 24
48 }, 48 },
49 "end": { 49 "end": {
50 "line": 31, 50 "line": 32,
51 "column": 3 51 "column": 3
52 } 52 }
53 }, 53 },
@@ -56,11 +56,11 @@
56 "defaultMessage": "!!!Create your first workspace", 56 "defaultMessage": "!!!Create your first workspace",
57 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 57 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
58 "start": { 58 "start": {
59 "line": 32, 59 "line": 33,
60 "column": 25 60 "column": 25
61 }, 61 },
62 "end": { 62 "end": {
63 "line": 35, 63 "line": 36,
64 "column": 3 64 "column": 3
65 } 65 }
66 }, 66 },
@@ -69,11 +69,11 @@
69 "defaultMessage": "!!!Reactivate premium account", 69 "defaultMessage": "!!!Reactivate premium account",
70 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 70 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
71 "start": { 71 "start": {
72 "line": 36, 72 "line": 37,
73 "column": 28 73 "column": 28
74 }, 74 },
75 "end": { 75 "end": {
76 "line": 39, 76 "line": 40,
77 "column": 3 77 "column": 3
78 } 78 }
79 }, 79 },
@@ -82,11 +82,11 @@
82 "defaultMessage": "!!!add new workspace", 82 "defaultMessage": "!!!add new workspace",
83 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 83 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
84 "start": { 84 "start": {
85 "line": 40, 85 "line": 41,
86 "column": 24 86 "column": 24
87 }, 87 },
88 "end": { 88 "end": {
89 "line": 43, 89 "line": 44,
90 "column": 3 90 "column": 3
91 } 91 }
92 }, 92 },
@@ -95,11 +95,11 @@
95 "defaultMessage": "!!!Premium feature", 95 "defaultMessage": "!!!Premium feature",
96 "file": "src/features/workspaces/components/WorkspaceDrawer.js", 96 "file": "src/features/workspaces/components/WorkspaceDrawer.js",
97 "start": { 97 "start": {
98 "line": 44, 98 "line": 45,
99 "column": 23 99 "column": 23
100 }, 100 },
101 "end": { 101 "end": {
102 "line": 47, 102 "line": 48,
103 "column": 3 103 "column": 3
104 } 104 }
105 } 105 }
diff --git a/src/stores/UIStore.js b/src/stores/UIStore.js
index 9680c5bcc..2c785111f 100644
--- a/src/stores/UIStore.js
+++ b/src/stores/UIStore.js
@@ -46,6 +46,7 @@ export default class UIStore extends Store {
46 // Actions 46 // Actions
47 @action _openSettings({ path = '/settings' }) { 47 @action _openSettings({ path = '/settings' }) {
48 const settingsPath = path !== '/settings' ? `/settings/${path}` : path; 48 const settingsPath = path !== '/settings' ? `/settings/${path}` : path;
49 console.log(settingsPath);
49 this.stores.router.push(settingsPath); 50 this.stores.router.push(settingsPath);
50 } 51 }
51 52