diff options
author | 2019-09-04 11:52:44 +0200 | |
---|---|---|
committer | 2019-09-04 11:52:44 +0200 | |
commit | 435756bfdb98759c27e2bcf4a01ef87d3c146892 (patch) | |
tree | ce8369b79a6e213de19669f7d3e1ea39552e255f /src | |
parent | Merge branch 'develop' into i18n (diff) | |
parent | Update en-US.json (diff) | |
download | ferdium-app-435756bfdb98759c27e2bcf4a01ef87d3c146892.tar.gz ferdium-app-435756bfdb98759c27e2bcf4a01ef87d3c146892.tar.zst ferdium-app-435756bfdb98759c27e2bcf4a01ef87d3c146892.zip |
Merge branch 'develop' into i18n
Diffstat (limited to 'src')
-rw-r--r-- | src/features/todos/components/TodosWebview.js | 104 | ||||
-rw-r--r-- | src/features/todos/containers/TodosScreen.js | 19 | ||||
-rw-r--r-- | src/features/todos/store.js | 1 | ||||
-rw-r--r-- | src/features/workspaces/components/WorkspaceDrawer.js | 7 | ||||
-rw-r--r-- | src/features/workspaces/components/WorkspaceSwitchingIndicator.js | 8 | ||||
-rw-r--r-- | src/i18n/locales/defaultMessages.json | 76 | ||||
-rw-r--r-- | src/i18n/locales/en-US.json | 3 | ||||
-rw-r--r-- | src/i18n/messages/src/features/todos/components/TodosWebview.json | 41 | ||||
-rw-r--r-- | src/i18n/messages/src/features/workspaces/components/WorkspaceDrawer.json | 32 | ||||
-rw-r--r-- | src/stores/UIStore.js | 1 |
10 files changed, 233 insertions, 59 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'; | |||
4 | import injectSheet from 'react-jss'; | 4 | import injectSheet from 'react-jss'; |
5 | import Webview from 'react-electron-web-view'; | 5 | import Webview from 'react-electron-web-view'; |
6 | import { Icon } from '@meetfranz/ui'; | 6 | import { Icon } from '@meetfranz/ui'; |
7 | import { defineMessages, intlShape } from 'react-intl'; | ||
7 | 8 | ||
9 | import { mdiChevronRight, mdiCheckAll } from '@mdi/js'; | ||
10 | import { Button } from '@meetfranz/forms'; | ||
8 | import * as environment from '../../../environment'; | 11 | import * as environment from '../../../environment'; |
12 | import Appear from '../../../components/ui/effects/Appear'; | ||
9 | 13 | ||
10 | const OPEN_TODOS_BUTTON_SIZE = 45; | 14 | const OPEN_TODOS_BUTTON_SIZE = 45; |
11 | const CLOSE_TODOS_BUTTON_SIZE = 35; | 15 | const CLOSE_TODOS_BUTTON_SIZE = 35; |
12 | 16 | ||
17 | const 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 | |||
13 | const styles = theme => ({ | 32 | const 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 @@ | |||
1 | import React, { Component } from 'react'; | 1 | import React, { Component } from 'react'; |
2 | import { observer } from 'mobx-react'; | 2 | import { observer, inject } from 'mobx-react'; |
3 | import PropTypes from 'prop-types'; | ||
3 | 4 | ||
5 | import FeaturesStore from '../../../stores/FeaturesStore'; | ||
4 | import TodosWebview from '../components/TodosWebview'; | 6 | import TodosWebview from '../components/TodosWebview'; |
5 | import ErrorBoundary from '../../../components/util/ErrorBoundary'; | 7 | import ErrorBoundary from '../../../components/util/ErrorBoundary'; |
6 | import { TODOS_MIN_WIDTH, todosStore } from '..'; | 8 | import { TODOS_MIN_WIDTH, todosStore } from '..'; |
7 | import { todoActions } from '../actions'; | 9 | import { todoActions } from '../actions'; |
8 | 10 | ||
9 | @observer | 11 | @inject('stores', 'actions') @observer |
10 | class TodosScreen extends Component { | 12 | class 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 | ||
32 | export default TodosScreen; | 36 | export default TodosScreen; |
37 | |||
38 | TodosScreen.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'; | |||
7 | import { Button } from '@meetfranz/forms/lib'; | 7 | import { Button } from '@meetfranz/forms/lib'; |
8 | import ReactTooltip from 'react-tooltip'; | 8 | import ReactTooltip from 'react-tooltip'; |
9 | 9 | ||
10 | import { mdiPlusBox, mdiSettings } from '@mdi/js'; | ||
10 | import WorkspaceDrawerItem from './WorkspaceDrawerItem'; | 11 | import WorkspaceDrawerItem from './WorkspaceDrawerItem'; |
11 | import { workspaceActions } from '../actions'; | 12 | import { workspaceActions } from '../actions'; |
12 | import { GA_CATEGORY_WORKSPACES, workspaceStore } from '../index'; | 13 | import { 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..32e9c743a 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})", |
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 | ||