diff --git a/src/components/ui/form/Button.js b/src/components/ui/form/Button.js index dcbdfbb..91d081a 100644 --- a/src/components/ui/form/Button.js +++ b/src/components/ui/form/Button.js @@ -1,25 +1,21 @@ // @flow +import type { MessageDescriptor } from 'react-intl'; import React from 'react'; - import classNames from 'classnames'; - import buttons from 'components/ui/buttons.scss'; import { COLOR_GREEN } from 'components/ui'; +import type { Color } from 'components/ui'; import FormComponent from './FormComponent'; -import type { Color } from 'components/ui'; - -export default class Button extends FormComponent { - props: { - label: string | {id: string}, - block: bool, - small: bool, - loading: bool, - className: string, - color: Color - }; - +export default class Button extends FormComponent<{ + label: string | MessageDescriptor, + block: bool, + small: bool, + loading: bool, + className: string, + color: Color +}> { static defaultProps = { color: COLOR_GREEN }; diff --git a/src/components/ui/form/Captcha.js b/src/components/ui/form/Captcha.js index e7717a8..2cad790 100644 --- a/src/components/ui/form/Captcha.js +++ b/src/components/ui/form/Captcha.js @@ -1,35 +1,41 @@ -import PropTypes from 'prop-types'; +// @flow import React from 'react'; - import classNames from 'classnames'; - +import type { CaptchaID } from 'services/captcha'; +import type { Skin } from 'components/ui'; import captcha from 'services/captcha'; import logger from 'services/logger'; -import { skins, SKIN_DARK } from 'components/ui'; import { ComponentLoader } from 'components/ui/loader'; import styles from './form.scss'; import FormInputComponent from './FormInputComponent'; -export default class Captcha extends FormInputComponent { - static displayName = 'Captcha'; - - static propTypes = { - skin: PropTypes.oneOf(skins), - delay: PropTypes.number - }; +export default class Captcha extends FormInputComponent<{ + delay: number, + skin: Skin, +}, { + code: string, +}> { + el: ?HTMLDivElement; + captchaId: CaptchaID; static defaultProps = { - skin: SKIN_DARK, + skin: 'dark', delay: 0 }; componentDidMount() { setTimeout(() => { - captcha.render(this.el, { + this.el && captcha.render(this.el, { skin: this.props.skin, onSetCode: this.setCode - }).then((captchaId) => this.captchaId = captchaId, (error) => logger.error('Error rendering captcha', { error })); + }) + .then((captchaId) => {this.captchaId = captchaId;}) + .catch((error) => { + logger.error('Failed rendering captcha', { + error + }); + }); }, this.props.delay); } @@ -64,5 +70,5 @@ export default class Captcha extends FormInputComponent { this.reset(); } - setCode = (code) => this.setState({code}); + setCode = (code: string) => this.setState({code}); } diff --git a/src/components/ui/form/FormComponent.js b/src/components/ui/form/FormComponent.js index 2a77f3c..661d294 100644 --- a/src/components/ui/form/FormComponent.js +++ b/src/components/ui/form/FormComponent.js @@ -1,10 +1,9 @@ +// @flow +import type { MessageDescriptor } from 'react-intl'; import { Component } from 'react'; - import { intlShape } from 'react-intl'; -export default class FormComponent extends Component { - static displayName = 'FormComponent'; - +export default class FormComponent
extends Component
{ static contextTypes = { intl: intlShape.isRequired }; @@ -16,7 +15,7 @@ export default class FormComponent extends Component { * * @return {string} */ - formatMessage(message) { + formatMessage(message: string | MessageDescriptor) { if (message && message.id && this.context && this.context.intl) { message = this.context.intl.formatMessage(message); } diff --git a/src/components/ui/form/FormInputComponent.js b/src/components/ui/form/FormInputComponent.js index 515c91e..1e48bdd 100644 --- a/src/components/ui/form/FormInputComponent.js +++ b/src/components/ui/form/FormInputComponent.js @@ -1,15 +1,18 @@ -import PropTypes from 'prop-types'; +// @flow +import type { MessageDescriptor } from 'react-intl'; import React from 'react'; import FormComponent from './FormComponent'; import FormError from './FormError'; -export default class FormInputComponent extends FormComponent { - static displayName = 'FormInputComponent'; +type Error = string | MessageDescriptor; - static propTypes = { - error: PropTypes.string - }; +export default class FormInputComponent
extends FormComponent
{
+ el: ?HTMLDivElement;
componentWillReceiveProps() {
if (this.state && this.state.error) {
@@ -19,7 +22,7 @@ export default class FormInputComponent extends FormComponent {
}
}
- setEl = (el) => {
+ setEl = (el: ?HTMLDivElement) => {
this.el = el;
};
@@ -29,7 +32,7 @@ export default class FormInputComponent extends FormComponent {
return