diff --git a/app/soapbox/features/compose/components/markdown_button.js b/app/soapbox/features/compose/components/markdown_button.js
deleted file mode 100644
index 0d4b294a7..000000000
--- a/app/soapbox/features/compose/components/markdown_button.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import PropTypes from 'prop-types';
-import React from 'react';
-import { defineMessages, injectIntl } from 'react-intl';
-
-import ComposeFormButton from './compose_form_button';
-
-const messages = defineMessages({
- marked: { id: 'compose_form.markdown.marked', defaultMessage: 'Post markdown enabled' },
- unmarked: { id: 'compose_form.markdown.unmarked', defaultMessage: 'Post markdown disabled' },
-});
-
-export default @injectIntl
-class MarkdownButton extends React.PureComponent {
-
- static propTypes = {
- active: PropTypes.bool,
- onClick: PropTypes.func.isRequired,
- intl: PropTypes.object.isRequired,
- };
-
- handleClick = () => {
- this.props.onClick();
- }
-
- render() {
- const { intl, active } = this.props;
-
- return (
-
- );
- }
-
-}
diff --git a/app/soapbox/features/compose/components/markdown_button.tsx b/app/soapbox/features/compose/components/markdown_button.tsx
new file mode 100644
index 000000000..01b0620a0
--- /dev/null
+++ b/app/soapbox/features/compose/components/markdown_button.tsx
@@ -0,0 +1,30 @@
+import React from 'react';
+import { defineMessages, useIntl } from 'react-intl';
+
+import ComposeFormButton from './compose_form_button';
+
+const messages = defineMessages({
+ marked: { id: 'compose_form.markdown.marked', defaultMessage: 'Post markdown enabled' },
+ unmarked: { id: 'compose_form.markdown.unmarked', defaultMessage: 'Post markdown disabled' },
+});
+
+interface IMarkdownButton {
+ active?: boolean,
+ onClick: () => void,
+}
+
+const MarkdownButton: React.FC = ({ active, onClick }) => {
+ const intl = useIntl();
+
+ return (
+
+ );
+
+};
+
+export default MarkdownButton;
diff --git a/app/soapbox/features/compose/components/poll_button.js b/app/soapbox/features/compose/components/poll_button.js
deleted file mode 100644
index bc0f25a06..000000000
--- a/app/soapbox/features/compose/components/poll_button.js
+++ /dev/null
@@ -1,46 +0,0 @@
-import PropTypes from 'prop-types';
-import React from 'react';
-import { defineMessages, injectIntl } from 'react-intl';
-
-import ComposeFormButton from './compose_form_button';
-
-const messages = defineMessages({
- add_poll: { id: 'poll_button.add_poll', defaultMessage: 'Add a poll' },
- remove_poll: { id: 'poll_button.remove_poll', defaultMessage: 'Remove poll' },
-});
-
-export default
-@injectIntl
-class PollButton extends React.PureComponent {
-
- static propTypes = {
- disabled: PropTypes.bool,
- unavailable: PropTypes.bool,
- active: PropTypes.bool,
- onClick: PropTypes.func.isRequired,
- intl: PropTypes.object.isRequired,
- };
-
- handleClick = () => {
- this.props.onClick();
- }
-
- render() {
- const { intl, active, unavailable, disabled } = this.props;
-
- if (unavailable) {
- return null;
- }
-
- return (
-
- );
- }
-
-}
diff --git a/app/soapbox/features/compose/components/poll_button.tsx b/app/soapbox/features/compose/components/poll_button.tsx
new file mode 100644
index 000000000..c59ae3151
--- /dev/null
+++ b/app/soapbox/features/compose/components/poll_button.tsx
@@ -0,0 +1,36 @@
+import React from 'react';
+import { defineMessages, useIntl } from 'react-intl';
+
+import ComposeFormButton from './compose_form_button';
+
+const messages = defineMessages({
+ add_poll: { id: 'poll_button.add_poll', defaultMessage: 'Add a poll' },
+ remove_poll: { id: 'poll_button.remove_poll', defaultMessage: 'Remove poll' },
+});
+
+interface IPollButton {
+ disabled?: boolean,
+ unavailable?: boolean,
+ active?: boolean,
+ onClick: () => void,
+}
+
+const PollButton: React.FC = ({ active, unavailable, disabled, onClick }) => {
+ const intl = useIntl();
+
+ if (unavailable) {
+ return null;
+ }
+
+ return (
+
+ );
+};
+
+export default PollButton;
diff --git a/app/soapbox/features/compose/components/spoiler_button.js b/app/soapbox/features/compose/components/spoiler_button.js
deleted file mode 100644
index 13ec3083e..000000000
--- a/app/soapbox/features/compose/components/spoiler_button.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import PropTypes from 'prop-types';
-import React from 'react';
-import { defineMessages, injectIntl } from 'react-intl';
-
-import ComposeFormButton from './compose_form_button';
-
-const messages = defineMessages({
- marked: { id: 'compose_form.spoiler.marked', defaultMessage: 'Text is hidden behind warning' },
- unmarked: { id: 'compose_form.spoiler.unmarked', defaultMessage: 'Text is not hidden' },
-});
-
-export default @injectIntl
-class SpoilerButton extends React.PureComponent {
-
- static propTypes = {
- active: PropTypes.bool,
- onClick: PropTypes.func.isRequired,
- intl: PropTypes.object.isRequired,
- };
-
- handleClick = () => {
- this.props.onClick();
- }
-
- render() {
- const { intl, active } = this.props;
-
- return (
-
- );
- }
-
-}
diff --git a/app/soapbox/features/compose/components/spoiler_button.tsx b/app/soapbox/features/compose/components/spoiler_button.tsx
new file mode 100644
index 000000000..6d9c1aa76
--- /dev/null
+++ b/app/soapbox/features/compose/components/spoiler_button.tsx
@@ -0,0 +1,29 @@
+import React from 'react';
+import { defineMessages, useIntl } from 'react-intl';
+
+import ComposeFormButton from './compose_form_button';
+
+const messages = defineMessages({
+ marked: { id: 'compose_form.spoiler.marked', defaultMessage: 'Text is hidden behind warning' },
+ unmarked: { id: 'compose_form.spoiler.unmarked', defaultMessage: 'Text is not hidden' },
+});
+
+interface ISpoilerButton {
+ active?: boolean,
+ onClick: () => void,
+}
+
+const SpoilerButton: React.FC = ({ active, onClick }) => {
+ const intl = useIntl();
+
+ return (
+
+ );
+};
+
+export default SpoilerButton;
diff --git a/app/soapbox/features/compose/containers/markdown_button_container.js b/app/soapbox/features/compose/containers/markdown_button_container.js
index 4001f3c92..cab3fb4d4 100644
--- a/app/soapbox/features/compose/containers/markdown_button_container.js
+++ b/app/soapbox/features/compose/containers/markdown_button_container.js
@@ -12,7 +12,10 @@ const mapStateToProps = (state, { intl }) => {
const mapDispatchToProps = dispatch => ({
onClick() {
- dispatch(changeComposeContentType(this.active ? 'text/plain' : 'text/markdown'));
+ dispatch((_, getState) => {
+ const active = getState().getIn(['compose', 'content_type']) === 'text/markdown';
+ dispatch(changeComposeContentType(active ? 'text/plain' : 'text/markdown'));
+ });
},
});