aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLibravatar Vijay A <vraravam@users.noreply.github.com>2022-05-06 19:06:00 -0500
committerLibravatar Vijay A <vraravam@users.noreply.github.com>2022-05-06 19:06:00 -0500
commit4df01bf76dd0c19d29587571131555639bf2b844 (patch)
treef19565f06da9d6c796bd3962d6f28a4fcff0da63 /src
parentRegenerate i18n file (diff)
downloadferdium-app-4df01bf76dd0c19d29587571131555639bf2b844.tar.gz
ferdium-app-4df01bf76dd0c19d29587571131555639bf2b844.tar.zst
ferdium-app-4df01bf76dd0c19d29587571131555639bf2b844.zip
Use components defined in the codebase; Extract some text for i18n purposes.
Diffstat (limited to 'src')
-rw-r--r--src/components/auth/ChangeServer.js3
-rw-r--r--src/components/auth/Import.js3
-rw-r--r--src/components/auth/Invite.js7
-rw-r--r--src/components/auth/Locked.js3
-rw-r--r--src/components/auth/Login.js3
-rw-r--r--src/components/auth/Password.js3
-rw-r--r--src/components/auth/SetupAssistant.js9
-rw-r--r--src/components/auth/Signup.js3
-rw-r--r--src/components/auth/Welcome.js3
-rw-r--r--src/components/services/content/ErrorHandlers/WebviewErrorHandler.js3
-rw-r--r--src/components/services/content/ServiceDisabled.js3
-rw-r--r--src/components/services/content/WebviewCrashHandler.js3
-rw-r--r--src/components/settings/account/AccountDashboard.js4
-rw-r--r--src/components/settings/recipes/RecipesDashboard.js4
-rw-r--r--src/components/settings/services/ServicesDashboard.js3
-rw-r--r--src/components/settings/settings/EditSettingsForm.js44
-rw-r--r--src/components/settings/team/TeamDashboard.js17
-rw-r--r--src/components/settings/user/EditUserForm.js5
-rw-r--r--src/components/ui/FullscreenLoader/index.js3
-rw-r--r--src/components/util/ErrorBoundary/index.js5
-rw-r--r--src/containers/settings/EditSettingsScreen.js8
-rw-r--r--src/features/basicAuth/Component.js3
-rw-r--r--src/features/workspaces/components/EditWorkspaceForm.js3
-rw-r--r--src/features/workspaces/components/WorkspacesDashboard.js3
-rw-r--r--src/i18n/locales/en-US.json7
-rw-r--r--src/styles/settings.scss8
26 files changed, 118 insertions, 45 deletions
diff --git a/src/components/auth/ChangeServer.js b/src/components/auth/ChangeServer.js
index 7e74fe779..081f2d61f 100644
--- a/src/components/auth/ChangeServer.js
+++ b/src/components/auth/ChangeServer.js
@@ -11,6 +11,7 @@ import Infobox from '../ui/Infobox';
11import { url, required } from '../../helpers/validation-helpers'; 11import { url, required } from '../../helpers/validation-helpers';
12import { LIVE_FERDIUM_API, LIVE_FRANZ_API, LIVE_FERDI_API } from '../../config'; 12import { LIVE_FERDIUM_API, LIVE_FRANZ_API, LIVE_FERDI_API } from '../../config';
13import globalMessages from '../../i18n/globalMessages'; 13import globalMessages from '../../i18n/globalMessages';
14import { H1 } from '../ui/headline';
14 15
15const messages = defineMessages({ 16const messages = defineMessages({
16 headline: { 17 headline: {
@@ -110,7 +111,7 @@ class ChangeServer extends Component {
110 <div className="auth__container"> 111 <div className="auth__container">
111 <form className="franz-form auth__form" onSubmit={e => this.submit(e)}> 112 <form className="franz-form auth__form" onSubmit={e => this.submit(e)}>
112 <Link to='/auth/welcome'><img src="./assets/images/logo.svg" className="auth__logo" alt="" /></Link> 113 <Link to='/auth/welcome'><img src="./assets/images/logo.svg" className="auth__logo" alt="" /></Link>
113 <h1>{intl.formatMessage(messages.headline)}</h1> 114 <H1>{intl.formatMessage(messages.headline)}</H1>
114 {(form.$('server').value === this.franzServer || form.$('server').value === this.ferdiServer) && ( 115 {(form.$('server').value === this.franzServer || form.$('server').value === this.ferdiServer) && (
115 <Infobox type="warning"> 116 <Infobox type="warning">
116 {intl.formatMessage(messages.warning)} 117 {intl.formatMessage(messages.warning)}
diff --git a/src/components/auth/Import.js b/src/components/auth/Import.js
index 281ceda97..e7d5731f9 100644
--- a/src/components/auth/Import.js
+++ b/src/components/auth/Import.js
@@ -8,6 +8,7 @@ import classnames from 'classnames';
8import Form from '../../lib/Form'; 8import Form from '../../lib/Form';
9import Toggle from '../ui/Toggle'; 9import Toggle from '../ui/Toggle';
10import Button from '../ui/Button'; 10import Button from '../ui/Button';
11import { H1 } from '../ui/headline';
11 12
12const messages = defineMessages({ 13const messages = defineMessages({
13 headline: { 14 headline: {
@@ -90,7 +91,7 @@ class Import extends Component {
90 onSubmit={e => this.submit(e)} 91 onSubmit={e => this.submit(e)}
91 > 92 >
92 <img src="./assets/images/logo.svg" className="auth__logo" alt="" /> 93 <img src="./assets/images/logo.svg" className="auth__logo" alt="" />
93 <h1>{intl.formatMessage(messages.headline)}</h1> 94 <H1>{intl.formatMessage(messages.headline)}</H1>
94 <table className="service-table available-services"> 95 <table className="service-table available-services">
95 <tbody> 96 <tbody>
96 {this.form.$('import').map((service, i) => ( 97 {this.form.$('import').map((service, i) => (
diff --git a/src/components/auth/Invite.js b/src/components/auth/Invite.js
index a23af7c6b..81618b3bd 100644
--- a/src/components/auth/Invite.js
+++ b/src/components/auth/Invite.js
@@ -11,6 +11,7 @@ import Form from '../../lib/Form';
11import { email } from '../../helpers/validation-helpers'; 11import { email } from '../../helpers/validation-helpers';
12import Input from '../ui/Input'; 12import Input from '../ui/Input';
13import Button from '../ui/Button'; 13import Button from '../ui/Button';
14import { H1 } from '../ui/headline';
14 15
15const messages = defineMessages({ 16const messages = defineMessages({
16 settingsHeadline: { 17 settingsHeadline: {
@@ -146,9 +147,9 @@ class Invite extends Component {
146 {!embed && ( 147 {!embed && (
147 <img src="./assets/images/logo.svg" className="auth__logo" alt="" /> 148 <img src="./assets/images/logo.svg" className="auth__logo" alt="" />
148 )} 149 )}
149 <h1 className={embed && 'invite__embed'}> 150 <H1 className={embed && 'invite__embed'}>
150 {intl.formatMessage(messages.headline)} 151 {intl.formatMessage(messages.headline)}
151 </h1> 152 </H1>
152 {form.$('invite').map(invite => ( 153 {form.$('invite').map(invite => (
153 <div className="grid" key={invite.key}> 154 <div className="grid" key={invite.key}>
154 <div className="grid__row"> 155 <div className="grid__row">
@@ -184,7 +185,7 @@ class Invite extends Component {
184 > 185 >
185 {embed && ( 186 {embed && (
186 <div className="settings__header"> 187 <div className="settings__header">
187 <h1>{this.props.intl.formatMessage(messages.settingsHeadline)}</h1> 188 <H1>{this.props.intl.formatMessage(messages.settingsHeadline)}</H1>
188 </div> 189 </div>
189 )} 190 )}
190 {!embed ? ( 191 {!embed ? (
diff --git a/src/components/auth/Locked.js b/src/components/auth/Locked.js
index ac1bc4e8c..e09a7d540 100644
--- a/src/components/auth/Locked.js
+++ b/src/components/auth/Locked.js
@@ -7,6 +7,7 @@ import { defineMessages, injectIntl } from 'react-intl';
7import Form from '../../lib/Form'; 7import Form from '../../lib/Form';
8import Input from '../ui/Input'; 8import Input from '../ui/Input';
9import Button from '../ui/Button'; 9import Button from '../ui/Button';
10import { H1 } from '../ui/headline';
10import { isMac } from '../../environment'; 11import { isMac } from '../../environment';
11 12
12import { globalError as globalErrorPropType } from '../../prop-types'; 13import { globalError as globalErrorPropType } from '../../prop-types';
@@ -100,7 +101,7 @@ class Locked extends Component {
100 <div className="auth__container"> 101 <div className="auth__container">
101 <form className="franz-form auth__form" onSubmit={e => this.submit(e)}> 102 <form className="franz-form auth__form" onSubmit={e => this.submit(e)}>
102 <img src="./assets/images/logo.svg" className="auth__logo" alt="" /> 103 <img src="./assets/images/logo.svg" className="auth__logo" alt="" />
103 <h1>{intl.formatMessage(messages.headline)}</h1> 104 <H1>{intl.formatMessage(messages.headline)}</H1>
104 105
105 {touchIdEnabled && ( 106 {touchIdEnabled && (
106 <> 107 <>
diff --git a/src/components/auth/Login.js b/src/components/auth/Login.js
index ccffd0c6a..305ed38b2 100644
--- a/src/components/auth/Login.js
+++ b/src/components/auth/Login.js
@@ -13,6 +13,7 @@ import Button from '../ui/Button';
13import Link from '../ui/Link'; 13import Link from '../ui/Link';
14 14
15import { globalError as globalErrorPropType } from '../../prop-types'; 15import { globalError as globalErrorPropType } from '../../prop-types';
16import { H1 } from '../ui/headline';
16 17
17const messages = defineMessages({ 18const messages = defineMessages({
18 headline: { 19 headline: {
@@ -117,7 +118,7 @@ class Login extends Component {
117 <div className="auth__container"> 118 <div className="auth__container">
118 <form className="franz-form auth__form" onSubmit={e => this.submit(e)}> 119 <form className="franz-form auth__form" onSubmit={e => this.submit(e)}>
119 <Link to='/auth/welcome'><img src="./assets/images/logo.svg" className="auth__logo" alt="" /></Link> 120 <Link to='/auth/welcome'><img src="./assets/images/logo.svg" className="auth__logo" alt="" /></Link>
120 <h1>{intl.formatMessage(messages.headline)}</h1> 121 <H1>{intl.formatMessage(messages.headline)}</H1>
121 {isTokenExpired && ( 122 {isTokenExpired && (
122 <p className="error-message center"> 123 <p className="error-message center">
123 {intl.formatMessage(messages.tokenExpired)} 124 {intl.formatMessage(messages.tokenExpired)}
diff --git a/src/components/auth/Password.js b/src/components/auth/Password.js
index 49930f6bd..8a5ef28f3 100644
--- a/src/components/auth/Password.js
+++ b/src/components/auth/Password.js
@@ -10,6 +10,7 @@ import Button from '../ui/Button';
10import Link from '../ui/Link'; 10import Link from '../ui/Link';
11import Infobox from '../ui/Infobox'; 11import Infobox from '../ui/Infobox';
12import globalMessages from '../../i18n/globalMessages'; 12import globalMessages from '../../i18n/globalMessages';
13import { H1 } from '../ui/headline';
13 14
14const messages = defineMessages({ 15const messages = defineMessages({
15 headline: { 16 headline: {
@@ -79,7 +80,7 @@ class Password extends Component {
79 <div className="auth__container"> 80 <div className="auth__container">
80 <form className="franz-form auth__form" onSubmit={e => this.submit(e)}> 81 <form className="franz-form auth__form" onSubmit={e => this.submit(e)}>
81 <Link to='/auth/welcome'><img src="./assets/images/logo.svg" className="auth__logo" alt="" /></Link> 82 <Link to='/auth/welcome'><img src="./assets/images/logo.svg" className="auth__logo" alt="" /></Link>
82 <h1>{intl.formatMessage(messages.headline)}</h1> 83 <H1>{intl.formatMessage(messages.headline)}</H1>
83 {status.length > 0 && status.includes('sent') && ( 84 {status.length > 0 && status.includes('sent') && (
84 <Infobox type="success" icon="checkbox-marked-circle-outline"> 85 <Infobox type="success" icon="checkbox-marked-circle-outline">
85 {intl.formatMessage(messages.successInfo)} 86 {intl.formatMessage(messages.successInfo)}
diff --git a/src/components/auth/SetupAssistant.js b/src/components/auth/SetupAssistant.js
index a24f4e4d5..90f6733a6 100644
--- a/src/components/auth/SetupAssistant.js
+++ b/src/components/auth/SetupAssistant.js
@@ -14,6 +14,7 @@ import Appear from '../ui/effects/Appear';
14import globalMessages from '../../i18n/globalMessages'; 14import globalMessages from '../../i18n/globalMessages';
15 15
16import { CDN_URL } from '../../config'; 16import { CDN_URL } from '../../config';
17import { H1, H2 } from '../ui/headline';
17 18
18const SLACK_ID = 'slack'; 19const SLACK_ID = 'slack';
19 20
@@ -213,8 +214,8 @@ class SetupAssistant extends Component {
213 )} 214 )}
214 215
215 <img src="./assets/images/logo.svg" className="auth__logo" alt="" /> 216 <img src="./assets/images/logo.svg" className="auth__logo" alt="" />
216 <h1>{intl.formatMessage(messages.headline)}</h1> 217 <H1>{intl.formatMessage(messages.headline)}</H1>
217 <h2>{intl.formatMessage(messages.subHeadline)}</h2> 218 <H2>{intl.formatMessage(messages.subHeadline)}</H2>
218 <div className={classnames('grid', classes.servicesGrid)}> 219 <div className={classnames('grid', classes.servicesGrid)}>
219 {Object.keys(services).map(id => { 220 {Object.keys(services).map(id => {
220 const service = services[id]; 221 const service = services[id];
@@ -252,7 +253,7 @@ class SetupAssistant extends Component {
252 className={classes.serviceIcon} 253 className={classes.serviceIcon}
253 alt="" 254 alt=""
254 /> 255 />
255 <h2>{service.name}</h2> 256 <H2>{service.name}</H2>
256 {id === SLACK_ID && slackWorkspace && ( 257 {id === SLACK_ID && slackWorkspace && (
257 <Badge type="secondary" className={classes.slackBadge}> 258 <Badge type="secondary" className={classes.slackBadge}>
258 {slackWorkspace} 259 {slackWorkspace}
@@ -280,7 +281,7 @@ class SetupAssistant extends Component {
280 > 281 >
281 <div className={classes.slackModalContent}> 282 <div className={classes.slackModalContent}>
282 <img src={`${CDN_URL}/recipes/dist/slack/src/icon.svg`} alt="" /> 283 <img src={`${CDN_URL}/recipes/dist/slack/src/icon.svg`} alt="" />
283 <h1>Create your first Slack workspace</h1> 284 <H1>Create your first Slack workspace</H1>
284 <form 285 <form
285 onSubmit={e => { 286 onSubmit={e => {
286 e.preventDefault(); 287 e.preventDefault();
diff --git a/src/components/auth/Signup.js b/src/components/auth/Signup.js
index 3cccb2428..1c7b8e247 100644
--- a/src/components/auth/Signup.js
+++ b/src/components/auth/Signup.js
@@ -12,6 +12,7 @@ import Link from '../ui/Link';
12 12
13import { globalError as globalErrorPropType } from '../../prop-types'; 13import { globalError as globalErrorPropType } from '../../prop-types';
14import { termsBase } from '../../api/apiBase'; 14import { termsBase } from '../../api/apiBase';
15import { H1 } from '../ui/headline';
15 16
16const messages = defineMessages({ 17const messages = defineMessages({
17 headline: { 18 headline: {
@@ -124,7 +125,7 @@ class Signup extends Component {
124 onSubmit={e => this.submit(e)} 125 onSubmit={e => this.submit(e)}
125 > 126 >
126 <Link to='/auth/welcome'><img src="./assets/images/logo.svg" className="auth__logo" alt="" /></Link> 127 <Link to='/auth/welcome'><img src="./assets/images/logo.svg" className="auth__logo" alt="" /></Link>
127 <h1>{intl.formatMessage(messages.headline)}</h1> 128 <H1>{intl.formatMessage(messages.headline)}</H1>
128 <div className="grid__row"> 129 <div className="grid__row">
129 <Input field={form.$('firstname')} focus /> 130 <Input field={form.$('firstname')} focus />
130 <Input field={form.$('lastname')} /> 131 <Input field={form.$('lastname')} />
diff --git a/src/components/auth/Welcome.js b/src/components/auth/Welcome.js
index 94ea4d603..ec4e7b68a 100644
--- a/src/components/auth/Welcome.js
+++ b/src/components/auth/Welcome.js
@@ -7,6 +7,7 @@ import serverlessLogin from '../../helpers/serverless-helpers';
7import { shuffleArray } from '../../helpers/array-helpers'; 7import { shuffleArray } from '../../helpers/array-helpers';
8 8
9import Link from '../ui/Link'; 9import Link from '../ui/Link';
10import { H1 } from '../ui/headline';
10 11
11const messages = defineMessages({ 12const messages = defineMessages({
12 signupButton: { 13 signupButton: {
@@ -56,7 +57,7 @@ class Welcome extends Component {
56 /> 57 />
57 {/* <img src="./assets/images/welcome.png" className="welcome__services" alt="" /> */} 58 {/* <img src="./assets/images/welcome.png" className="welcome__services" alt="" /> */}
58 <div className="welcome__text"> 59 <div className="welcome__text">
59 <h1>Ferdium</h1> 60 <H1>Ferdium</H1>
60 </div> 61 </div>
61 </div> 62 </div>
62 <div className="welcome__buttons"> 63 <div className="welcome__buttons">
diff --git a/src/components/services/content/ErrorHandlers/WebviewErrorHandler.js b/src/components/services/content/ErrorHandlers/WebviewErrorHandler.js
index d605b3a52..cdc12b01b 100644
--- a/src/components/services/content/ErrorHandlers/WebviewErrorHandler.js
+++ b/src/components/services/content/ErrorHandlers/WebviewErrorHandler.js
@@ -7,6 +7,7 @@ import injectSheet from 'react-jss';
7import Button from '../../../ui/Button'; 7import Button from '../../../ui/Button';
8 8
9import styles from './styles'; 9import styles from './styles';
10import { H1 } from '../../../ui/headline';
10 11
11const messages = defineMessages({ 12const messages = defineMessages({
12 headline: { 13 headline: {
@@ -46,7 +47,7 @@ class WebviewErrorHandler extends Component {
46 47
47 return ( 48 return (
48 <div className={classes.component}> 49 <div className={classes.component}>
49 <h1>{intl.formatMessage(messages.headline)}</h1> 50 <H1>{intl.formatMessage(messages.headline)}</H1>
50 <p>{intl.formatMessage(messages.text, { name })}</p> 51 <p>{intl.formatMessage(messages.text, { name })}</p>
51 <p> 52 <p>
52 <strong>{intl.formatMessage(messages.errorMessage)}:</strong>{' '} 53 <strong>{intl.formatMessage(messages.errorMessage)}:</strong>{' '}
diff --git a/src/components/services/content/ServiceDisabled.js b/src/components/services/content/ServiceDisabled.js
index b4658618e..da5357bf2 100644
--- a/src/components/services/content/ServiceDisabled.js
+++ b/src/components/services/content/ServiceDisabled.js
@@ -4,6 +4,7 @@ import { observer } from 'mobx-react';
4import { defineMessages, injectIntl } from 'react-intl'; 4import { defineMessages, injectIntl } from 'react-intl';
5 5
6import Button from '../../ui/Button'; 6import Button from '../../ui/Button';
7import { H1 } from '../../ui/headline';
7 8
8const messages = defineMessages({ 9const messages = defineMessages({
9 headline: { 10 headline: {
@@ -28,7 +29,7 @@ class ServiceDisabled extends Component {
28 29
29 return ( 30 return (
30 <div className="services__info-layer"> 31 <div className="services__info-layer">
31 <h1>{intl.formatMessage(messages.headline, { name })}</h1> 32 <H1>{intl.formatMessage(messages.headline, { name })}</H1>
32 <Button 33 <Button
33 label={intl.formatMessage(messages.action, { name })} 34 label={intl.formatMessage(messages.action, { name })}
34 buttonType="inverted" 35 buttonType="inverted"
diff --git a/src/components/services/content/WebviewCrashHandler.js b/src/components/services/content/WebviewCrashHandler.js
index 1ca5ba415..7e635e9ab 100644
--- a/src/components/services/content/WebviewCrashHandler.js
+++ b/src/components/services/content/WebviewCrashHandler.js
@@ -5,6 +5,7 @@ import { defineMessages, injectIntl } from 'react-intl';
5import ms from 'ms'; 5import ms from 'ms';
6 6
7import Button from '../../ui/Button'; 7import Button from '../../ui/Button';
8import { H1 } from '../../ui/headline';
8 9
9const messages = defineMessages({ 10const messages = defineMessages({
10 headline: { 11 headline: {
@@ -61,7 +62,7 @@ class WebviewCrashHandler extends Component {
61 62
62 return ( 63 return (
63 <div className="services__info-layer"> 64 <div className="services__info-layer">
64 <h1>{intl.formatMessage(messages.headline)}</h1> 65 <H1>{intl.formatMessage(messages.headline)}</H1>
65 <p>{intl.formatMessage(messages.text, { name })}</p> 66 <p>{intl.formatMessage(messages.text, { name })}</p>
66 <Button 67 <Button
67 // label={`Reload ${name}`} 68 // label={`Reload ${name}`}
diff --git a/src/components/settings/account/AccountDashboard.js b/src/components/settings/account/AccountDashboard.js
index 78d41a273..1d2d7a207 100644
--- a/src/components/settings/account/AccountDashboard.js
+++ b/src/components/settings/account/AccountDashboard.js
@@ -107,9 +107,9 @@ class AccountDashboard extends Component {
107 <div className="settings__body"> 107 <div className="settings__body">
108 {isUsingWithoutAccount && ( 108 {isUsingWithoutAccount && (
109 <> 109 <>
110 <h1 style={{ marginBottom: 0 }}> 110 <H1 className='.no-bottom-margin'>
111 {intl.formatMessage(messages.accountUnavailable)} 111 {intl.formatMessage(messages.accountUnavailable)}
112 </h1> 112 </H1>
113 <p 113 <p
114 className="settings__message" 114 className="settings__message"
115 style={{ 115 style={{
diff --git a/src/components/settings/recipes/RecipesDashboard.js b/src/components/settings/recipes/RecipesDashboard.js
index a10998085..cbfe676fe 100644
--- a/src/components/settings/recipes/RecipesDashboard.js
+++ b/src/components/settings/recipes/RecipesDashboard.js
@@ -9,7 +9,7 @@ import injectSheet from 'react-jss';
9import { mdiOpenInNew } from '@mdi/js'; 9import { mdiOpenInNew } from '@mdi/js';
10import { Button } from '../../ui/button/index'; 10import { Button } from '../../ui/button/index';
11import { Input } from '../../ui/input/index'; 11import { Input } from '../../ui/input/index';
12import { H3, H2 } from '../../ui/headline'; 12import { H3, H2, H1 } from '../../ui/headline';
13import SearchInput from '../../ui/SearchInput'; 13import SearchInput from '../../ui/SearchInput';
14import Infobox from '../../ui/Infobox'; 14import Infobox from '../../ui/Infobox';
15import RecipeItem from './RecipeItem'; 15import RecipeItem from './RecipeItem';
@@ -157,7 +157,7 @@ class RecipesDashboard extends Component {
157 return ( 157 return (
158 <div className="settings__main"> 158 <div className="settings__main">
159 <div className="settings__header"> 159 <div className="settings__header">
160 <h1>{intl.formatMessage(messages.headline)}</h1> 160 <H1>{intl.formatMessage(messages.headline)}</H1>
161 </div> 161 </div>
162 <div className="settings__body recipes"> 162 <div className="settings__body recipes">
163 {serviceStatus.length > 0 && serviceStatus.includes('created') && ( 163 {serviceStatus.length > 0 && serviceStatus.includes('created') && (
diff --git a/src/components/settings/services/ServicesDashboard.js b/src/components/settings/services/ServicesDashboard.js
index b405593fd..c5bb1433c 100644
--- a/src/components/settings/services/ServicesDashboard.js
+++ b/src/components/settings/services/ServicesDashboard.js
@@ -10,6 +10,7 @@ import Loader from '../../ui/Loader';
10import FAB from '../../ui/FAB'; 10import FAB from '../../ui/FAB';
11import ServiceItem from './ServiceItem'; 11import ServiceItem from './ServiceItem';
12import Appear from '../../ui/effects/Appear'; 12import Appear from '../../ui/effects/Appear';
13import { H1 } from '../../ui/headline';
13 14
14const messages = defineMessages({ 15const messages = defineMessages({
15 headline: { 16 headline: {
@@ -87,7 +88,7 @@ class ServicesDashboard extends Component {
87 return ( 88 return (
88 <div className="settings__main"> 89 <div className="settings__main">
89 <div className="settings__header"> 90 <div className="settings__header">
90 <h1>{intl.formatMessage(messages.headline)}</h1> 91 <H1>{intl.formatMessage(messages.headline)}</H1>
91 </div> 92 </div>
92 <div className="settings__body"> 93 <div className="settings__body">
93 {(services.length > 0 || searchNeedle) && !isLoading && ( 94 {(services.length > 0 || searchNeedle) && !isLoading && (
diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js
index 600345117..870264dfb 100644
--- a/src/components/settings/settings/EditSettingsForm.js
+++ b/src/components/settings/settings/EditSettingsForm.js
@@ -13,6 +13,7 @@ import Toggle from '../../ui/Toggle';
13import Select from '../../ui/Select'; 13import Select from '../../ui/Select';
14import Input from '../../ui/Input'; 14import Input from '../../ui/Input';
15import Infobox from '../../ui/Infobox'; 15import Infobox from '../../ui/Infobox';
16import { H1, H2 } from '../../ui/headline';
16 17
17import { 18import {
18 DEFAULT_APP_SETTINGS, 19 DEFAULT_APP_SETTINGS,
@@ -93,6 +94,26 @@ const messages = defineMessages({
93 id: 'settings.app.headlineAppearance', 94 id: 'settings.app.headlineAppearance',
94 defaultMessage: 'Appearance', 95 defaultMessage: 'Appearance',
95 }, 96 },
97 sectionMain: {
98 id: 'settings.app.sectionMain',
99 defaultMessage: 'Main',
100 },
101 sectionHibernation: {
102 id: 'settings.app.sectionHibernation',
103 defaultMessage: 'Hibernation',
104 },
105 sectionGeneralUi: {
106 id: 'settings.app.sectionGeneralUi',
107 defaultMessage: 'General UI',
108 },
109 sectionSidebarSettings: {
110 id: 'settings.app.sectionSidebarSettings',
111 defaultMessage: 'Sidebar Settings',
112 },
113 sectionServiceIconsSettings: {
114 id: 'settings.app.sectionServiceIconsSettings',
115 defaultMessage: 'Service Icons Settings',
116 },
96 universalDarkModeInfo: { 117 universalDarkModeInfo: {
97 id: 'settings.app.universalDarkModeInfo', 118 id: 'settings.app.universalDarkModeInfo',
98 defaultMessage: 119 defaultMessage:
@@ -305,7 +326,7 @@ class EditSettingsForm extends Component {
305 return ( 326 return (
306 <div className="settings__main"> 327 <div className="settings__main">
307 <div className="settings__header"> 328 <div className="settings__header">
308 <h1>{intl.formatMessage(globalMessages.settings)}</h1> 329 <H1>{intl.formatMessage(globalMessages.settings)}</H1>
309 </div> 330 </div>
310 <div className="settings__body"> 331 <div className="settings__body">
311 <form 332 <form
@@ -401,7 +422,9 @@ class EditSettingsForm extends Component {
401 {/* General */} 422 {/* General */}
402 {this.state.activeSetttingsTab === 'general' && ( 423 {this.state.activeSetttingsTab === 'general' && (
403 <div> 424 <div>
404 <h2><center>Main</center></h2> 425 <H2 className='settings__section_header'>
426 {intl.formatMessage(messages.sectionMain)}
427 </H2>
405 <Toggle field={form.$('autoLaunchOnStart')} /> 428 <Toggle field={form.$('autoLaunchOnStart')} />
406 <Toggle field={form.$('runInBackground')} /> 429 <Toggle field={form.$('runInBackground')} />
407 <Toggle field={form.$('confirmOnQuit')} /> 430 <Toggle field={form.$('confirmOnQuit')} />
@@ -504,7 +527,9 @@ class EditSettingsForm extends Component {
504 527
505 <Hr /> 528 <Hr />
506 529
507 <h2><center>Hibernation</center></h2> 530 <H2 className='settings__section_header'>
531 {intl.formatMessage(messages.sectionHibernation)}
532 </H2>
508 <Select field={form.$('hibernationStrategy')} /> 533 <Select field={form.$('hibernationStrategy')} />
509 <Toggle field={form.$('hibernateOnStartup')} /> 534 <Toggle field={form.$('hibernateOnStartup')} />
510 <p 535 <p
@@ -522,14 +547,15 @@ class EditSettingsForm extends Component {
522 <Select field={form.$('wakeUpStrategy')} /> 547 <Select field={form.$('wakeUpStrategy')} />
523 <Select field={form.$('wakeUpHibernationStrategy')} /> 548 <Select field={form.$('wakeUpHibernationStrategy')} />
524 <Toggle field={form.$('wakeUpHibernationSplay')} /> 549 <Toggle field={form.$('wakeUpHibernationSplay')} />
525
526 </div> 550 </div>
527 )} 551 )}
528 552
529 {/* Appearance */} 553 {/* Appearance */}
530 {this.state.activeSetttingsTab === 'appearance' && ( 554 {this.state.activeSetttingsTab === 'appearance' && (
531 <div> 555 <div>
532 <h2><center>General UI</center></h2> 556 <H2 className='settings__section_header'>
557 {intl.formatMessage(messages.sectionGeneralUi)}
558 </H2>
533 {isMac && <Toggle field={form.$('showDragArea')} />} 559 {isMac && <Toggle field={form.$('showDragArea')} />}
534 560
535 <Toggle field={form.$('adaptableDarkMode')} /> 561 <Toggle field={form.$('adaptableDarkMode')} />
@@ -582,7 +608,9 @@ class EditSettingsForm extends Component {
582 608
583 <Hr /> 609 <Hr />
584 610
585 <h2><center>Sidebar Settings</center></h2> 611 <H2 className='settings__section_header'>
612 {intl.formatMessage(messages.sectionSidebarSettings)}
613 </H2>
586 614
587 <Select field={form.$('serviceRibbonWidth')} /> 615 <Select field={form.$('serviceRibbonWidth')} />
588 616
@@ -602,7 +630,9 @@ class EditSettingsForm extends Component {
602 630
603 <Hr /> 631 <Hr />
604 632
605 <h2><center>Service Icons Settings</center></h2> 633 <H2 className='settings__section_header'>
634 {intl.formatMessage(messages.sectionServiceIconsSettings)}
635 </H2>
606 636
607 <Toggle field={form.$('showDisabledServices')} /> 637 <Toggle field={form.$('showDisabledServices')} />
608 <Toggle field={form.$('showServiceName')} /> 638 <Toggle field={form.$('showServiceName')} />
diff --git a/src/components/settings/team/TeamDashboard.js b/src/components/settings/team/TeamDashboard.js
index 22d386775..228796ad9 100644
--- a/src/components/settings/team/TeamDashboard.js
+++ b/src/components/settings/team/TeamDashboard.js
@@ -9,6 +9,7 @@ import classnames from 'classnames';
9import Loader from '../../ui/Loader'; 9import Loader from '../../ui/Loader';
10import Button from '../../ui/Button'; 10import Button from '../../ui/Button';
11import Infobox from '../../ui/Infobox'; 11import Infobox from '../../ui/Infobox';
12import { H1 } from '../../ui/headline';
12import { LIVE_FRANZ_API } from '../../../config'; 13import { LIVE_FRANZ_API } from '../../../config';
13 14
14const messages = defineMessages({ 15const messages = defineMessages({
@@ -43,6 +44,14 @@ const messages = defineMessages({
43 defaultMessage: 44 defaultMessage:
44 'Teams are currently only available when using the Franz Server and after paying for Franz Professional. Please change your server to https://api.franzinfra.com to use teams.', 45 'Teams are currently only available when using the Franz Server and after paying for Franz Professional. Please change your server to https://api.franzinfra.com to use teams.',
45 }, 46 },
47 tryReloadUserInfoRequest: {
48 id: 'settings.team.tryReloadUserInfoRequest',
49 defaultMessage: 'Try reloading',
50 },
51 userInfoRequestFailed: {
52 id: 'settings.team.userInfoRequestFailed',
53 defaultMessage: 'User Info request failed',
54 },
46}); 55});
47 56
48const styles = { 57const styles = {
@@ -136,14 +145,14 @@ class TeamDashboard extends Component {
136 145
137 {!userInfoRequestFailed && !isLoading && ( 146 {!userInfoRequestFailed && !isLoading && (
138 <> 147 <>
139 <h1 148 <H1
140 className={classnames({ 149 className={classnames({
141 [classes.headline]: true, 150 [classes.headline]: true,
142 [classes.headlineWithSpacing]: true, 151 [classes.headlineWithSpacing]: true,
143 })} 152 })}
144 > 153 >
145 {intl.formatMessage(messages.contentHeadline)} 154 {intl.formatMessage(messages.contentHeadline)}
146 </h1> 155 </H1>
147 <div className={classes.container}> 156 <div className={classes.container}>
148 <div className={classes.content}> 157 <div className={classes.content}>
149 <p>{intl.formatMessage(messages.intro)}</p> 158 <p>{intl.formatMessage(messages.intro)}</p>
@@ -177,9 +186,9 @@ class TeamDashboard extends Component {
177 </span> 186 </span>
178 </div> 187 </div>
179 <div className="settings__body"> 188 <div className="settings__body">
180 <h1 className={classes.headline}> 189 <H1 className={classes.headline}>
181 {intl.formatMessage(messages.teamsUnavailable)} 190 {intl.formatMessage(messages.teamsUnavailable)}
182 </h1> 191 </H1>
183 <p 192 <p
184 className="settings__message" 193 className="settings__message"
185 style={{ 194 style={{
diff --git a/src/components/settings/user/EditUserForm.js b/src/components/settings/user/EditUserForm.js
index 95498d9bb..4d101730f 100644
--- a/src/components/settings/user/EditUserForm.js
+++ b/src/components/settings/user/EditUserForm.js
@@ -9,6 +9,7 @@ import Form from '../../../lib/Form';
9import Button from '../../ui/Button'; 9import Button from '../../ui/Button';
10import Radio from '../../ui/Radio'; 10import Radio from '../../ui/Radio';
11import Infobox from '../../ui/Infobox'; 11import Infobox from '../../ui/Infobox';
12import { H2 } from '../../ui/headline';
12 13
13const messages = defineMessages({ 14const messages = defineMessages({
14 headline: { 15 headline: {
@@ -85,7 +86,7 @@ class EditUserForm extends Component {
85 {intl.formatMessage(messages.successInfo)} 86 {intl.formatMessage(messages.successInfo)}
86 </Infobox> 87 </Infobox>
87 )} 88 )}
88 <h2>{intl.formatMessage(messages.headlineAccount)}</h2> 89 <H2>{intl.formatMessage(messages.headlineAccount)}</H2>
89 <div className="grid__row"> 90 <div className="grid__row">
90 <Input {...form.$('firstname').bind()} focus /> 91 <Input {...form.$('firstname').bind()} focus />
91 <Input {...form.$('lastname').bind()} /> 92 <Input {...form.$('lastname').bind()} />
@@ -95,7 +96,7 @@ class EditUserForm extends Component {
95 {form.$('accountType').value === 'company' && ( 96 {form.$('accountType').value === 'company' && (
96 <Input field={form.$('organization')} /> 97 <Input field={form.$('organization')} />
97 )} 98 )}
98 <h2>{intl.formatMessage(messages.headlinePassword)}</h2> 99 <H2>{intl.formatMessage(messages.headlinePassword)}</H2>
99 <Input {...form.$('oldPassword').bind()} showPasswordToggle /> 100 <Input {...form.$('oldPassword').bind()} showPasswordToggle />
100 <Input 101 <Input
101 {...form.$('newPassword').bind()} 102 {...form.$('newPassword').bind()}
diff --git a/src/components/ui/FullscreenLoader/index.js b/src/components/ui/FullscreenLoader/index.js
index d2f4b8321..983e7ea6c 100644
--- a/src/components/ui/FullscreenLoader/index.js
+++ b/src/components/ui/FullscreenLoader/index.js
@@ -7,6 +7,7 @@ import classnames from 'classnames';
7import Loader from '../Loader'; 7import Loader from '../Loader';
8 8
9import styles from './styles'; 9import styles from './styles';
10import { H1 } from '../headline';
10 11
11class FullscreenLoader extends Component { 12class FullscreenLoader extends Component {
12 static propTypes = { 13 static propTypes = {
@@ -37,7 +38,7 @@ class FullscreenLoader extends Component {
37 [`${className}`]: className, 38 [`${className}`]: className,
38 })} 39 })}
39 > 40 >
40 <h1 className={classes.title}>{title}</h1> 41 <H1 className={classes.title}>{title}</H1>
41 <Loader color={spinnerColor || theme.colorFullscreenLoaderSpinner} /> 42 <Loader color={spinnerColor || theme.colorFullscreenLoaderSpinner} />
42 {children && <div className={classes.content}>{children}</div>} 43 {children && <div className={classes.content}>{children}</div>}
43 </div> 44 </div>
diff --git a/src/components/util/ErrorBoundary/index.js b/src/components/util/ErrorBoundary/index.js
index 6a8b126f1..8687cc09f 100644
--- a/src/components/util/ErrorBoundary/index.js
+++ b/src/components/util/ErrorBoundary/index.js
@@ -4,6 +4,7 @@ import injectSheet from 'react-jss';
4import { defineMessages, injectIntl } from 'react-intl'; 4import { defineMessages, injectIntl } from 'react-intl';
5 5
6import Button from '../../ui/Button'; 6import Button from '../../ui/Button';
7import { H1 } from '../../ui/headline';
7 8
8import styles from './styles'; 9import styles from './styles';
9 10
@@ -39,9 +40,9 @@ class ErrorBoundary extends Component {
39 if (this.state.hasError) { 40 if (this.state.hasError) {
40 return ( 41 return (
41 <div className={classes.component}> 42 <div className={classes.component}>
42 <h1 className={classes.title}> 43 <H1 className={classes.title}>
43 {intl.formatMessage(messages.headline)} 44 {intl.formatMessage(messages.headline)}
44 </h1> 45 </H1>
45 <Button 46 <Button
46 label={intl.formatMessage(messages.action)} 47 label={intl.formatMessage(messages.action)}
47 buttonType="inverted" 48 buttonType="inverted"
diff --git a/src/containers/settings/EditSettingsScreen.js b/src/containers/settings/EditSettingsScreen.js
index cf3d7b32f..038497f0d 100644
--- a/src/containers/settings/EditSettingsScreen.js
+++ b/src/containers/settings/EditSettingsScreen.js
@@ -579,11 +579,11 @@ class EditSettingsScreen extends Component {
579 options: wakeUpHibernationStrategies, 579 options: wakeUpHibernationStrategies,
580 default: DEFAULT_APP_SETTINGS.wakeUpHibernationStrategy, 580 default: DEFAULT_APP_SETTINGS.wakeUpHibernationStrategy,
581 }, 581 },
582 wakeUpHibernationSplay: { 582 wakeUpHibernationSplay: {
583 label: intl.formatMessage(messages.wakeUpHibernationSplay), 583 label: intl.formatMessage(messages.wakeUpHibernationSplay),
584 value: settings.all.app.wakeUpHibernationSplay, 584 value: settings.all.app.wakeUpHibernationSplay,
585 default: DEFAULT_APP_SETTINGS.wakeUpHibernationSplay, 585 default: DEFAULT_APP_SETTINGS.wakeUpHibernationSplay,
586 }, 586 },
587 predefinedTodoServer: { 587 predefinedTodoServer: {
588 label: intl.formatMessage(messages.predefinedTodoServer), 588 label: intl.formatMessage(messages.predefinedTodoServer),
589 value: settings.all.app.predefinedTodoServer, 589 value: settings.all.app.predefinedTodoServer,
diff --git a/src/features/basicAuth/Component.js b/src/features/basicAuth/Component.js
index 89b0a4e72..ab5c518f8 100644
--- a/src/features/basicAuth/Component.js
+++ b/src/features/basicAuth/Component.js
@@ -14,6 +14,7 @@ import Form from './Form';
14 14
15import styles from './styles'; 15import styles from './styles';
16import globalMessages from '../../i18n/globalMessages'; 16import globalMessages from '../../i18n/globalMessages';
17import { H1 } from '../../components/ui/headline';
17 18
18const messages = defineMessages({ 19const messages = defineMessages({
19 signIn: { 20 signIn: {
@@ -64,7 +65,7 @@ class BasicAuthModal extends Component {
64 close={this.cancel.bind(this)} 65 close={this.cancel.bind(this)}
65 showClose={false} 66 showClose={false}
66 > 67 >
67 <h1>{intl.formatMessage(messages.signIn)}</h1> 68 <H1>{intl.formatMessage(messages.signIn)}</H1>
68 <p> 69 <p>
69 http 70 http
70 {authInfo.port === 443 && 's'} 71 {authInfo.port === 443 && 's'}
diff --git a/src/features/workspaces/components/EditWorkspaceForm.js b/src/features/workspaces/components/EditWorkspaceForm.js
index 878713fe9..6829fddaa 100644
--- a/src/features/workspaces/components/EditWorkspaceForm.js
+++ b/src/features/workspaces/components/EditWorkspaceForm.js
@@ -18,6 +18,7 @@ import Request from '../../../stores/lib/Request';
18import { KEEP_WS_LOADED_USID } from '../../../config'; 18import { KEEP_WS_LOADED_USID } from '../../../config';
19 19
20import Toggle from '../../../components/ui/Toggle'; 20import Toggle from '../../../components/ui/Toggle';
21import { H2 } from '../../../components/ui/headline';
21 22
22const messages = defineMessages({ 23const messages = defineMessages({
23 buttonDelete: { 24 buttonDelete: {
@@ -183,7 +184,7 @@ class EditWorkspaceForm extends Component {
183 {intl.formatMessage(messages.keepLoadedInfo)} 184 {intl.formatMessage(messages.keepLoadedInfo)}
184 </p> 185 </p>
185 </div> 186 </div>
186 <h2>{intl.formatMessage(messages.servicesInWorkspaceHeadline)}</h2> 187 <H2>{intl.formatMessage(messages.servicesInWorkspaceHeadline)}</H2>
187 <div className={classes.serviceList}> 188 <div className={classes.serviceList}>
188 {services.length === 0 ? ( 189 {services.length === 0 ? (
189 <div className="align-middle settings__empty-state"> 190 <div className="align-middle settings__empty-state">
diff --git a/src/features/workspaces/components/WorkspacesDashboard.js b/src/features/workspaces/components/WorkspacesDashboard.js
index 770186be7..f21aaa258 100644
--- a/src/features/workspaces/components/WorkspacesDashboard.js
+++ b/src/features/workspaces/components/WorkspacesDashboard.js
@@ -12,6 +12,7 @@ import CreateWorkspaceForm from './CreateWorkspaceForm';
12import Request from '../../../stores/lib/Request'; 12import Request from '../../../stores/lib/Request';
13import Appear from '../../../components/ui/effects/Appear'; 13import Appear from '../../../components/ui/effects/Appear';
14import UIStore from '../../../stores/UIStore'; 14import UIStore from '../../../stores/UIStore';
15import { H1 } from '../../../components/ui/headline';
15 16
16const messages = defineMessages({ 17const messages = defineMessages({
17 headline: { 18 headline: {
@@ -98,7 +99,7 @@ class WorkspacesDashboard extends Component {
98 return ( 99 return (
99 <div className="settings__main"> 100 <div className="settings__main">
100 <div className="settings__header"> 101 <div className="settings__header">
101 <h1>{intl.formatMessage(messages.headline)}</h1> 102 <H1>{intl.formatMessage(messages.headline)}</H1>
102 </div> 103 </div>
103 <div className="settings__body"> 104 <div className="settings__body">
104 {/* ===== Workspace updated info ===== */} 105 {/* ===== Workspace updated info ===== */}
diff --git a/src/i18n/locales/en-US.json b/src/i18n/locales/en-US.json
index 9578df4de..8514530f3 100644
--- a/src/i18n/locales/en-US.json
+++ b/src/i18n/locales/en-US.json
@@ -267,6 +267,11 @@
267 "settings.app.restartRequired": "Changes require restart", 267 "settings.app.restartRequired": "Changes require restart",
268 "settings.app.scheduledDNDInfo": "Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdium.", 268 "settings.app.scheduledDNDInfo": "Scheduled Do-not-Disturb allows you to define a period of time in which you do not want to get Notifications from Ferdium.",
269 "settings.app.scheduledDNDTimeInfo": "Times in 24-Hour-Format. End time can be before start time (e.g. start 17:00, end 09:00) to enable Do-not-Disturb overnight.", 269 "settings.app.scheduledDNDTimeInfo": "Times in 24-Hour-Format. End time can be before start time (e.g. start 17:00, end 09:00) to enable Do-not-Disturb overnight.",
270 "settings.app.sectionGeneralUi": "General UI",
271 "settings.app.sectionHibernation": "Hibernation",
272 "settings.app.sectionMain": "Main",
273 "settings.app.sectionServiceIconsSettings": "Service Icons Settings",
274 "settings.app.sectionSidebarSettings": "Sidebar Settings",
270 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdium - we will not send any personal information like your message data!", 275 "settings.app.sentryInfo": "Sending telemetry data allows us to find errors in Ferdium - we will not send any personal information like your message data!",
271 "settings.app.spellCheckerLanguageInfo": "Ferdium uses your Mac's build-in spellchecker to check for typos. If you want to change the languages the spellchecker checks for, you can do so in your Mac's System Preferences.", 276 "settings.app.spellCheckerLanguageInfo": "Ferdium uses your Mac's build-in spellchecker to check for typos. If you want to change the languages the spellchecker checks for, you can do so in your Mac's System Preferences.",
272 "settings.app.subheadlineCache": "Cache", 277 "settings.app.subheadlineCache": "Cache",
@@ -369,6 +374,8 @@
369 "settings.team.manageAction": "Manage your Team on meetfranz.com", 374 "settings.team.manageAction": "Manage your Team on meetfranz.com",
370 "settings.team.teamsUnavailable": "Teams are unavailable", 375 "settings.team.teamsUnavailable": "Teams are unavailable",
371 "settings.team.teamsUnavailableInfo": "Teams are currently only available when using the Franz Server and after paying for Franz Professional. Please change your server to https://api.franzinfra.com to use teams.", 376 "settings.team.teamsUnavailableInfo": "Teams are currently only available when using the Franz Server and after paying for Franz Professional. Please change your server to https://api.franzinfra.com to use teams.",
377 "settings.team.tryReloadUserInfoRequest": "Try reloading",
378 "settings.team.userInfoRequestFailed": "User Info request failed",
372 "settings.user.form.accountType.company": "Company", 379 "settings.user.form.accountType.company": "Company",
373 "settings.user.form.accountType.individual": "Individual", 380 "settings.user.form.accountType.individual": "Individual",
374 "settings.user.form.accountType.label": "Account type", 381 "settings.user.form.accountType.label": "Account type",
diff --git a/src/styles/settings.scss b/src/styles/settings.scss
index 3178f718d..100e627ea 100644
--- a/src/styles/settings.scss
+++ b/src/styles/settings.scss
@@ -34,6 +34,10 @@
34 } 34 }
35 } 35 }
36 36
37 .settings__section_header {
38 text-align: center;
39 }
40
37 .settings__main { 41 .settings__main {
38 background: $dark-theme-gray-darkest; 42 background: $dark-theme-gray-darkest;
39 } 43 }
@@ -268,6 +272,10 @@
268 a { 272 a {
269 display: inline-block; 273 display: inline-block;
270 } 274 }
275
276 .no-bottom-margin {
277 margin-bottom: 0;
278 }
271 } 279 }
272 280
273 .settings__close { 281 .settings__close {