From 33123c354b79f7951423dd75097b11e7eb075f99 Mon Sep 17 00:00:00 2001 From: Markus Hatvan Date: Fri, 2 Jul 2021 19:49:55 -0600 Subject: Upgrade various dependencies to latest part 2 (#1557) * Upgrade various dependencies to latest, remove unnecessary electron-hunspell - upgrade eslint and friends to latest - remove deprecated 'node-sass' in favor of 'sass' - disable new rules from 'eslint-config-airbnb' that are conflicting with current code style - add workspace config for 'vscode' that silences 'experimentalDecorator' warning and forces 'prettier' to single quote * Run yarn lint to autofix with new ruleset and worked down lint issues to zero --- src/components/auth/Import.js | 87 +++++++++-------- src/components/auth/Invite.js | 105 ++++++++++++--------- src/components/auth/Pricing.js | 1 - src/components/auth/Welcome.js | 1 - src/components/services/content/ServiceView.js | 8 +- src/components/services/content/Services.js | 1 - .../services/content/WebviewCrashHandler.js | 1 - src/components/settings/SettingsLayout.js | 37 ++++++-- .../settings/services/EditServiceForm.js | 15 ++- .../settings/settings/EditSettingsForm.js | 9 +- src/components/settings/team/TeamDashboard.js | 1 - src/components/ui/ImageUpload.js | 4 +- src/components/ui/InfoBar.js | 25 +++-- src/components/ui/Infobox.js | 33 ++++--- src/components/ui/Input.js | 54 ++++++----- src/components/ui/Tabs/TabItem.js | 2 +- src/components/ui/Tabs/Tabs.js | 8 +- 17 files changed, 229 insertions(+), 163 deletions(-) (limited to 'src/components') diff --git a/src/components/auth/Import.js b/src/components/auth/Import.js index 3e34c3162..3073cad73 100644 --- a/src/components/auth/Import.js +++ b/src/components/auth/Import.js @@ -28,7 +28,9 @@ const messages = defineMessages({ }, }); -export default @observer class Import extends Component { +export default +@observer +class Import extends Component { static propTypes = { services: MobxPropTypes.arrayOrObservableArray.isRequired, onSubmit: PropTypes.func.isRequired, @@ -40,17 +42,21 @@ export default @observer class Import extends Component { intl: intlShape, }; - componentWillMount() { + componentDidMount() { const config = { fields: { - import: [...this.props.services.filter(s => s.recipe).map(s => ({ - fields: { - add: { - default: true, - options: s, - }, - }, - }))], + import: [ + ...this.props.services + .filter((s) => s.recipe) + .map((s) => ({ + fields: { + add: { + default: true, + options: s, + }, + }, + })), + ], }, }; @@ -62,9 +68,12 @@ export default @observer class Import extends Component { e.preventDefault(); this.form.submit({ onSuccess: (form) => { - const servicesImport = form.values().import - .map((value, i) => !value.add || services.filter(s => s.recipe)[i]) - .filter(s => typeof s !== 'boolean'); + const servicesImport = form + .values() + .import.map( + (value, i) => !value.add || services.filter((s) => s.recipe)[i], + ) + .filter((s) => typeof s !== 'boolean'); this.props.onSubmit({ services: servicesImport }); }, @@ -76,37 +85,31 @@ export default @observer class Import extends Component { const { intl } = this.context; const { services, isSubmitting, inviteRoute } = this.props; - const availableServices = services.filter(s => s.recipe); - const unavailableServices = services.filter(s => !s.recipe); + const availableServices = services.filter((s) => s.recipe); + const unavailableServices = services.filter((s) => !s.recipe); return (
-
this.submit(e)}> - -

- {intl.formatMessage(messages.headline)} -

+ this.submit(e)} + > + +

{intl.formatMessage(messages.headline)}

{this.form.$('import').map((service, i) => ( - +
- + {unavailableServices.length > 0 && (
- {intl.formatMessage(messages.notSupportedHeadline)} + + {intl.formatMessage(messages.notSupportedHeadline)} +

- {services.filter(s => !s.recipe).map((service, i) => ( - - {service.name !== '' ? service.name : service.service} - {unavailableServices.length > i + 1 ? ', ' : ''} - - ))} + {services + .filter((s) => !s.recipe) + .map((service, i) => ( + + {service.name !== '' ? service.name : service.service} + {unavailableServices.length > i + 1 ? ', ' : ''} + + ))}

)} diff --git a/src/components/auth/Invite.js b/src/components/auth/Invite.js index fd957ee73..4b4d63a6b 100644 --- a/src/components/auth/Invite.js +++ b/src/components/auth/Invite.js @@ -43,7 +43,9 @@ const messages = defineMessages({ }, }); -export default @observer class Invite extends Component { +export default +@observer +class Invite extends Component { static propTypes = { onSubmit: PropTypes.func.isRequired, embed: PropTypes.bool, @@ -63,36 +65,41 @@ export default @observer class Invite extends Component { state = { showSuccessInfo: false }; - componentWillMount() { - const handlers = { - onChange: () => { - this.setState({ showSuccessInfo: false }); - }, - }; - - this.form = new Form({ - fields: { - invite: [...Array(3).fill({ - fields: { - name: { - label: this.context.intl.formatMessage(messages.nameLabel), - placeholder: this.context.intl.formatMessage(messages.nameLabel), - handlers, - // related: ['invite.0.email'], // path accepted but does not work - }, - email: { - label: this.context.intl.formatMessage(messages.emailLabel), - placeholder: this.context.intl.formatMessage(messages.emailLabel), - handlers, - validators: [email], - }, - }, - })], + componentDidMount() { + this.form = new Form( + { + fields: { + invite: [ + ...Array(3).fill({ + fields: { + name: { + label: this.context.intl.formatMessage(messages.nameLabel), + placeholder: this.context.intl.formatMessage( + messages.nameLabel, + ), + onChange: () => { + this.setState({ showSuccessInfo: false }); + }, + // related: ['invite.0.email'], // path accepted but does not work + }, + email: { + label: this.context.intl.formatMessage(messages.emailLabel), + placeholder: this.context.intl.formatMessage( + messages.emailLabel, + ), + onChange: () => { + this.setState({ showSuccessInfo: false }); + }, + validators: [email], + }, + }, + }), + ], + }, }, - }, this.context.intl); - } + this.context.intl, + ); - componentDidMount() { document.querySelector('input:first-child').focus(); } @@ -117,9 +124,10 @@ export default @observer class Invite extends Component { const { intl } = this.context; const { embed, isInviteSuccessful, isLoadingInvite } = this.props; - const atLeastOneEmailAddress = form.$('invite') - .map(invite => invite.$('email').value) - .some(emailValue => emailValue.trim() !== ''); + const atLeastOneEmailAddress = form + .$('invite') + .map((invite) => invite.$('email').value) + .some((emailValue) => emailValue.trim() !== ''); const sendButtonClassName = classnames({ auth__button: true, @@ -127,7 +135,7 @@ export default @observer class Invite extends Component { }); const renderForm = ( - + <> {this.state.showSuccessInfo && isInviteSuccessful && ( )} - this.submit(e)}> + this.submit(e)} + > {!embed && ( - + )}

{intl.formatMessage(messages.headline)}

- {form.$('invite').map(invite => ( + {form.$('invite').map((invite) => (
@@ -175,17 +182,27 @@ export default @observer class Invite extends Component { )} - + ); return ( -
+
{embed && (
-

{this.context.intl.formatMessage(messages.settingsHeadline)}

+

+ {this.context.intl.formatMessage(messages.settingsHeadline)} +

)} - {!embed ?
{renderForm}
:
{renderForm}
} + {!embed ? ( +
{renderForm}
+ ) : ( +
{renderForm}
+ )}
); } diff --git a/src/components/auth/Pricing.js b/src/components/auth/Pricing.js index fecc6ba56..2fcabe54d 100644 --- a/src/components/auth/Pricing.js +++ b/src/components/auth/Pricing.js @@ -10,7 +10,6 @@ import { Button } from '@meetfranz/forms'; import { FeatureItem } from '../ui/FeatureItem'; import { FeatureList } from '../ui/FeatureList'; - const messages = defineMessages({ headline: { id: 'pricing.trial.headline.pro', diff --git a/src/components/auth/Welcome.js b/src/components/auth/Welcome.js index 6e742e0c1..5f2fac64b 100644 --- a/src/components/auth/Welcome.js +++ b/src/components/auth/Welcome.js @@ -72,7 +72,6 @@ export default @inject('actions') @observer class Login extends Component {

- {service.isActive && service.isEnabled && ( - + <> {service.hasCrashed && ( )} - + )} {!service.isEnabled ? ( - + <> {service.isActive && ( )} - + ) : ( <> {(!service.isHibernating || service.isHibernationEnabled) ? ( diff --git a/src/components/services/content/Services.js b/src/components/services/content/Services.js index 7cf02c237..caa3cf9aa 100644 --- a/src/components/services/content/Services.js +++ b/src/components/services/content/Services.js @@ -34,7 +34,6 @@ const messages = defineMessages({ }, }); - const styles = { confettiContainer: { position: 'absolute', diff --git a/src/components/services/content/WebviewCrashHandler.js b/src/components/services/content/WebviewCrashHandler.js index 7a69dba87..b62940c06 100644 --- a/src/components/services/content/WebviewCrashHandler.js +++ b/src/components/services/content/WebviewCrashHandler.js @@ -43,7 +43,6 @@ export default @observer class WebviewCrashHandler extends Component { countdownIntervalTimeout = ms('1s'); - componentDidMount() { const { reload } = this.props; diff --git a/src/components/settings/SettingsLayout.js b/src/components/settings/SettingsLayout.js index 72ba7b2e3..5b3b754fa 100644 --- a/src/components/settings/SettingsLayout.js +++ b/src/components/settings/SettingsLayout.js @@ -1,38 +1,55 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; +import { defineMessages, intlShape } from 'react-intl'; import ErrorBoundary from '../util/ErrorBoundary'; import { oneOrManyChildElements } from '../../prop-types'; import Appear from '../ui/effects/Appear'; -export default @observer class SettingsLayout extends Component { +const messages = defineMessages({ + closeSettings: { + id: 'settings.app.closeSettings', + defaultMessage: '!!!Close settings', + }, +}); + +export default +@observer +class SettingsLayout extends Component { static propTypes = { navigation: PropTypes.element.isRequired, children: oneOrManyChildElements.isRequired, closeSettings: PropTypes.func.isRequired, }; - componentWillMount() { + static contextTypes = { + intl: intlShape, + }; + + componentDidMount() { document.addEventListener('keydown', this.handleKeyDown.bind(this), false); } componentWillUnmount() { - document.removeEventListener('keydown', this.handleKeyDown.bind(this), false); + document.removeEventListener( + 'keydown', + this.handleKeyDown.bind(this), + false, + ); } handleKeyDown(e) { - if (e.keyCode === 27) { // escape key + if (e.keyCode === 27) { + // escape key this.props.closeSettings(); } } render() { - const { - navigation, - children, - closeSettings, - } = this.props; + const { navigation, children, closeSettings } = this.props; + + const { intl } = this.context; return ( @@ -42,6 +59,7 @@ export default @observer class SettingsLayout extends Component { type="button" className="settings-wrapper__action" onClick={closeSettings} + aria-label={intl.formatMessage(messages.closeSettings)} />
{navigation} @@ -50,6 +68,7 @@ export default @observer class SettingsLayout extends Component { type="button" className="settings__close mdi mdi-close" onClick={closeSettings} + aria-label={intl.formatMessage(messages.closeSettings)} />
diff --git a/src/components/settings/services/EditServiceForm.js b/src/components/settings/services/EditServiceForm.js index 1bbc1f1d4..a8501670b 100644 --- a/src/components/settings/services/EditServiceForm.js +++ b/src/components/settings/services/EditServiceForm.js @@ -311,14 +311,14 @@ export default @observer class EditServiceForm extends Component { {recipe.hasCustomUrl && ( {user.isPremium || recipe.author.find(a => a.email === user.email) ? ( - + <> {form.error === 'url-validation-error' && (

{intl.formatMessage(messages.customUrlValidationError, { name: recipe.name })}

)} -
+ ) : (

{intl.formatMessage(messages.customUrlPremiumInfo)}

@@ -360,12 +360,12 @@ export default @observer class EditServiceForm extends Component {

{intl.formatMessage(messages.headlineBadges)}

{recipe.hasIndirectMessages && form.$('isBadgeEnabled').value && ( - + <>

{intl.formatMessage(messages.indirectMessageInfo)}

-
+ )}
@@ -389,8 +389,7 @@ export default @observer class EditServiceForm extends Component { - ) - } + )}
@@ -425,7 +424,7 @@ export default @observer class EditServiceForm extends Component { {form.$('proxy.isEnabled').value && ( - + <>
@@ -449,7 +448,7 @@ export default @observer class EditServiceForm extends Component { {intl.formatMessage(messages.proxyInfo)}

- + )}
diff --git a/src/components/settings/settings/EditSettingsForm.js b/src/components/settings/settings/EditSettingsForm.js index 4ba7dc720..98a119bfa 100644 --- a/src/components/settings/settings/EditSettingsForm.js +++ b/src/components/settings/settings/EditSettingsForm.js @@ -567,7 +567,7 @@ export default @observer class EditSettingsForm extends Component { condition={!isSpellcheckerIncludedInCurrentPlan} gaEventInfo={{ category: 'User', event: 'upgrade', label: 'spellchecker' }} > - + <> @@ -577,7 +577,7 @@ export default @observer class EditSettingsForm extends Component { {isMac && form.$('enableSpellchecking').value && (

{intl.formatMessage(messages.spellCheckerLanguageInfo)}

)} -
+ {intl.formatMessage(messages.updateStatusUpToDate)} - ) - } + )}

- Ferdi is based on {' '} Franz - , a project published under the {' '} diff --git a/src/components/settings/team/TeamDashboard.js b/src/components/settings/team/TeamDashboard.js index f26f4cc0c..602d6e490 100644 --- a/src/components/settings/team/TeamDashboard.js +++ b/src/components/settings/team/TeamDashboard.js @@ -98,7 +98,6 @@ const styles = { }, }; - export default @injectSheet(styles) @observer class TeamDashboard extends Component { static propTypes = { isLoading: PropTypes.bool.isRequired, diff --git a/src/components/ui/ImageUpload.js b/src/components/ui/ImageUpload.js index e831eb47b..6a8c7645f 100644 --- a/src/components/ui/ImageUpload.js +++ b/src/components/ui/ImageUpload.js @@ -55,7 +55,7 @@ export default @observer class ImageUpload extends Component {

{(field.value && field.value !== 'delete') || this.state.path ? ( - + <>
- + ) : ( { diff --git a/src/components/ui/InfoBar.js b/src/components/ui/InfoBar.js index 612399e9f..bd2af2296 100644 --- a/src/components/ui/InfoBar.js +++ b/src/components/ui/InfoBar.js @@ -3,11 +3,21 @@ import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; import classnames from 'classnames'; import Loader from 'react-loader'; +import { defineMessages, intlShape } from 'react-intl'; // import { oneOrManyChildElements } from '../../prop-types'; import Appear from './effects/Appear'; -export default @observer class InfoBar extends Component { +const messages = defineMessages({ + hide: { + id: 'infobar.hide', + defaultMessage: '!!!Hide', + }, +}); + +export default +@observer +class InfoBar extends Component { static propTypes = { // eslint-disable-next-line children: PropTypes.any.isRequired, @@ -32,6 +42,10 @@ export default @observer class InfoBar extends Component { onHide: () => null, }; + static contextTypes = { + intl: intlShape, + }; + render() { const { children, @@ -45,6 +59,8 @@ export default @observer class InfoBar extends Component { onHide, } = this.props; + const { intl } = this.context; + let transitionName = 'slideUp'; if (position === 'top') { transitionName = 'slideDown'; @@ -63,11 +79,7 @@ export default @observer class InfoBar extends Component {
{children} {ctaLabel && ( -
diff --git a/src/components/ui/Input.js b/src/components/ui/Input.js index 4e3eb4ab8..7417fef1c 100644 --- a/src/components/ui/Input.js +++ b/src/components/ui/Input.js @@ -3,10 +3,20 @@ import PropTypes from 'prop-types'; import { observer } from 'mobx-react'; import { Field } from 'mobx-react-form'; import classnames from 'classnames'; +import { defineMessages, intlShape } from 'react-intl'; import { scorePassword as scorePasswordFunc } from '../../helpers/password-helpers'; -export default @observer class Input extends Component { +const messages = defineMessages({ + passwordToggle: { + id: 'settings.app.form.passwordToggle', + defaultMessage: '!!!Password toggle', + }, +}); + +export default +@observer +class Input extends Component { static propTypes = { field: PropTypes.instanceOf(Field).isRequired, className: PropTypes.string, @@ -28,10 +38,14 @@ export default @observer class Input extends Component { suffix: '', }; + static contextTypes = { + intl: intlShape, + }; + state = { showPassword: false, passwordScore: 0, - } + }; inputElement = null; @@ -68,6 +82,8 @@ export default @observer class Input extends Component { const { passwordScore } = this.state; + const { intl } = this.context; + let { type } = field; if (type === 'password' && this.state.showPassword) { type = 'text'; @@ -82,9 +98,7 @@ export default @observer class Input extends Component { })} >
- {prefix && ( - {prefix} - )} + {prefix && {prefix}} this.onChange(e)} + onChange={(e) => this.onChange(e)} onBlur={field.onBlur} onFocus={field.onFocus} - ref={(element) => { this.inputElement = element; }} + ref={(element) => { + this.inputElement = element; + }} disabled={field.disabled} /> - {suffix && ( - {suffix} - )} + {suffix && {suffix}} {showPasswordToggle && (
{field.label && showLabel && ( -
); } diff --git a/src/components/ui/Tabs/TabItem.js b/src/components/ui/Tabs/TabItem.js index 16881a7f7..546b05a4e 100644 --- a/src/components/ui/Tabs/TabItem.js +++ b/src/components/ui/Tabs/TabItem.js @@ -11,7 +11,7 @@ export default class TabItem extends Component { const { children } = this.props; return ( - {children} + <>{children} ); } } diff --git a/src/components/ui/Tabs/Tabs.js b/src/components/ui/Tabs/Tabs.js index 196cddc66..7ece29fbe 100644 --- a/src/components/ui/Tabs/Tabs.js +++ b/src/components/ui/Tabs/Tabs.js @@ -5,7 +5,9 @@ import classnames from 'classnames'; import { oneOrManyChildElements } from '../../../prop-types'; -export default @observer class Tab extends Component { +export default +@observer +class Tab extends Component { static propTypes = { children: oneOrManyChildElements.isRequired, active: PropTypes.number, @@ -15,7 +17,7 @@ export default @observer class Tab extends Component { active: 0, }; - componentWillMount() { + componentDidMount() { this.setState({ active: this.props.active }); } @@ -25,7 +27,7 @@ export default @observer class Tab extends Component { render() { const { children: childElements } = this.props; - const children = childElements.filter(c => !!c); + const children = childElements.filter((c) => !!c); if (children.length === 1) { return
{children}
; -- cgit v1.2.3-70-g09d2