diff --git a/components/widgets/settings/bool_setting.test.jsx b/components/widgets/settings/bool_setting.test.tsx similarity index 97% rename from components/widgets/settings/bool_setting.test.jsx rename to components/widgets/settings/bool_setting.test.tsx index 00c8ec565ab9..3c7c95f0c590 100644 --- a/components/widgets/settings/bool_setting.test.jsx +++ b/components/widgets/settings/bool_setting.test.tsx @@ -3,7 +3,7 @@ import React from 'react'; import {shallow} from 'enzyme'; -import BoolSetting from './bool_setting.jsx'; +import BoolSetting from './bool_setting'; describe('components/widgets/settings/BoolSetting', () => { test('render component with required props', () => { diff --git a/components/widgets/settings/bool_setting.jsx b/components/widgets/settings/bool_setting.tsx similarity index 64% rename from components/widgets/settings/bool_setting.jsx rename to components/widgets/settings/bool_setting.tsx index 8310dd7a803c..461ac3dce4b1 100644 --- a/components/widgets/settings/bool_setting.jsx +++ b/components/widgets/settings/bool_setting.tsx @@ -1,33 +1,32 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import PropTypes from 'prop-types'; import React from 'react'; -import Setting from './setting.jsx'; +import Setting from './setting'; -export default class BoolSetting extends React.Component { - static propTypes = { - id: PropTypes.string.isRequired, - label: PropTypes.node.isRequired, - labelClassName: PropTypes.string, - helpText: PropTypes.node, - placeholder: PropTypes.string.isRequired, - value: PropTypes.bool.isRequired, - inputClassName: PropTypes.string, - onChange: PropTypes.func, - }; +type Props = { + id: string; + label: React.ReactNode; + labelClassName: string; + helpText?: React.ReactNode; + placeholder: string; + value: boolean; + inputClassName: string; + onChange(name: string, value: any): void; // value is any since onChange is a common func for inputs and checkboxes +} - static defaultProps = { +export default class BoolSetting extends React.Component { + public static defaultProps: Partial = { labelClassName: '', inputClassName: '', }; - handleChange = (e) => { + private handleChange: React.ChangeEventHandler = (e) => { this.props.onChange(this.props.id, e.target.checked); } - render() { + public render(): JSX.Element { return ( { test('render component with required props', () => { diff --git a/components/widgets/settings/radio_setting.jsx b/components/widgets/settings/radio_setting.tsx similarity index 70% rename from components/widgets/settings/radio_setting.jsx rename to components/widgets/settings/radio_setting.tsx index 55fe756e25f8..19a145e7db9e 100644 --- a/components/widgets/settings/radio_setting.jsx +++ b/components/widgets/settings/radio_setting.tsx @@ -1,37 +1,34 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. -import PropTypes from 'prop-types'; import React from 'react'; -import Setting from './setting.jsx'; +import Setting from './setting'; -export default class RadioSetting extends React.Component { - static propTypes = { - id: PropTypes.string.isRequired, - options: PropTypes.arrayOf(PropTypes.shape({ - text: PropTypes.string, - value: PropTypes.string, - })), - label: PropTypes.node.isRequired, - onChange: PropTypes.func.isRequired, - value: PropTypes.string, - labelClassName: PropTypes.string, - inputClassName: PropTypes.string, - helpText: PropTypes.node, - }; +type Props = { + id: string; + options: {text: string;value: string}[]; + label: React.ReactNode; + onChange(name: string, value: any): void; + value?: string; + labelClassName?: string; + inputClassName?: string; + helpText?: React.ReactNode; + +} - static defaultProps = { +export default class RadioSetting extends React.Component { + public static defaultProps: Partial = { labelClassName: '', inputClassName: '', options: [], }; - handleChange = (e) => { + private handleChange: React.ChangeEventHandler = (e) => { this.props.onChange(this.props.id, e.target.value); } - render() { + public render(): JSX.Element { return ( { - const { - children, - footer, - helpText, - inputId, - label, - labelClassName, - inputClassName, - } = props; +type Props = { + inputId?: string; + label: React.ReactNode; + labelClassName?: string; + inputClassName?: string; + children: React.ReactNode; + helpText?: React.ReactNode; + footer?: React.ReactNode; +} +const Setting: React.FC = ({ + inputId, + label, + labelClassName, + inputClassName, + children, + footer, + helpText, +}: Props) => { return (