diff --git a/app/javascript/gabsocial/components/about_sidebar.js b/app/javascript/gabsocial/components/about_sidebar.js
index 79a4daa1..32f1bdf3 100644
--- a/app/javascript/gabsocial/components/about_sidebar.js
+++ b/app/javascript/gabsocial/components/about_sidebar.js
@@ -10,24 +10,8 @@ import Heading from './heading'
import BackButton from './back_button'
import ResponsiveClassesComponent from '../features/ui/util/responsive_classes_component'
-const messages = defineMessages({
- blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },
- mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' },
- preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
- menu: { id: 'menu', defaultMessage: 'Menu' },
-})
-
-export default
-@injectIntl
class AboutSidebar extends ImmutablePureComponent {
- static propTypes = {
- intl: PropTypes.object.isRequired,
- account: ImmutablePropTypes.map,
- title: PropTypes.string,
- items: PropTypes.array.isRequired,
- }
-
render() {
const {
intl,
@@ -76,4 +60,20 @@ class AboutSidebar extends ImmutablePureComponent {
)
}
-}
\ No newline at end of file
+}
+
+const messages = defineMessages({
+ blocks: { id: 'navigation_bar.blocks', defaultMessage: 'Blocked users' },
+ mutes: { id: 'navigation_bar.mutes', defaultMessage: 'Muted users' },
+ preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },
+ menu: { id: 'menu', defaultMessage: 'Menu' },
+})
+
+AboutSidebar.propTypes = {
+ intl: PropTypes.object.isRequired,
+ account: ImmutablePropTypes.map,
+ title: PropTypes.string,
+ items: PropTypes.array.isRequired,
+}
+
+export default injectIntl(AboutSidebar)
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/compose/components/compose_extra_button.js b/app/javascript/gabsocial/features/compose/components/compose_extra_button.js
index fdeafb84..439fbd49 100644
--- a/app/javascript/gabsocial/features/compose/components/compose_extra_button.js
+++ b/app/javascript/gabsocial/features/compose/components/compose_extra_button.js
@@ -5,16 +5,7 @@ import Button from '../../../components/button'
const cx = classNames.bind(_s)
-export default class ComposeExtraButton extends React.PureComponent {
- static propTypes = {
- title: PropTypes.string,
- disabled: PropTypes.bool,
- onClick: PropTypes.func,
- icon: PropTypes.string,
- small: PropTypes.bool,
- active: PropTypes.bool,
- buttonRef: PropTypes.func,
- }
+class ComposeExtraButton extends React.PureComponent {
render() {
const {
@@ -79,4 +70,17 @@ export default class ComposeExtraButton extends React.PureComponent {
)
}
-}
\ No newline at end of file
+
+}
+
+ComposeExtraButton.propTypes = {
+ title: PropTypes.string,
+ disabled: PropTypes.bool,
+ onClick: PropTypes.func,
+ icon: PropTypes.string,
+ small: PropTypes.bool,
+ active: PropTypes.bool,
+ buttonRef: PropTypes.func,
+}
+
+export default ComposeExtraButton
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/compose/components/compose_form.js b/app/javascript/gabsocial/features/compose/components/compose_form.js
index 95e9cd1c..b6f40b9f 100644
--- a/app/javascript/gabsocial/features/compose/components/compose_form.js
+++ b/app/javascript/gabsocial/features/compose/components/compose_form.js
@@ -41,8 +41,6 @@ const messages = defineMessages({
schedulePost: { id: 'compose_form.schedule_post', defaultMessage: 'Schedule Post' },
})
-export default
-@injectIntl
class ComposeForm extends ImmutablePureComponent {
static contextTypes = {
@@ -53,53 +51,6 @@ class ComposeForm extends ImmutablePureComponent {
composeFocused: false,
}
- static propTypes = {
- intl: PropTypes.object.isRequired,
- edit: PropTypes.bool,
- isMatch: PropTypes.bool,
- text: PropTypes.string.isRequired,
- markdown: PropTypes.string,
- suggestions: ImmutablePropTypes.list,
- account: ImmutablePropTypes.map.isRequired,
- status: ImmutablePropTypes.map,
- spoiler: PropTypes.bool,
- privacy: PropTypes.string,
- spoilerText: PropTypes.string,
- focusDate: PropTypes.instanceOf(Date),
- caretPosition: PropTypes.number,
- preselectDate: PropTypes.instanceOf(Date),
- isSubmitting: PropTypes.bool,
- isChangingUpload: PropTypes.bool,
- isUploading: PropTypes.bool,
- onChange: PropTypes.func.isRequired,
- onSubmit: PropTypes.func.isRequired,
- onClearSuggestions: PropTypes.func.isRequired,
- onFetchSuggestions: PropTypes.func.isRequired,
- onSuggestionSelected: PropTypes.func.isRequired,
- onChangeSpoilerText: PropTypes.func.isRequired,
- onPaste: PropTypes.func.isRequired,
- onPickEmoji: PropTypes.func.isRequired,
- showSearch: PropTypes.bool,
- anyMedia: PropTypes.bool,
- shouldCondense: PropTypes.bool,
- autoFocus: PropTypes.bool,
- groupId: PropTypes.string,
- isModalOpen: PropTypes.bool,
- scheduledAt: PropTypes.instanceOf(Date),
- setScheduledAt: PropTypes.func.isRequired,
- replyToId: PropTypes.string,
- reduxReplyToId: PropTypes.string,
- hasPoll: PropTypes.bool,
- selectedGifSrc: PropTypes.string,
- isPro: PropTypes.bool,
- hidePro: PropTypes.bool,
- autoJoinGroup: PropTypes.bool,
- }
-
- static defaultProps = {
- showSearch: false,
- };
-
handleChange = (e, selectionStart) => {
this.props.onChange(e.target.value, e.target.markdown, this.props.replyToId, selectionStart)
}
@@ -528,4 +479,53 @@ class ComposeForm extends ImmutablePureComponent {
)
}
-}
\ No newline at end of file
+}
+
+ComposeForm.propTypes = {
+ intl: PropTypes.object.isRequired,
+ edit: PropTypes.bool,
+ isMatch: PropTypes.bool,
+ text: PropTypes.string.isRequired,
+ markdown: PropTypes.string,
+ suggestions: ImmutablePropTypes.list,
+ account: ImmutablePropTypes.map.isRequired,
+ status: ImmutablePropTypes.map,
+ spoiler: PropTypes.bool,
+ privacy: PropTypes.string,
+ spoilerText: PropTypes.string,
+ focusDate: PropTypes.instanceOf(Date),
+ caretPosition: PropTypes.number,
+ preselectDate: PropTypes.instanceOf(Date),
+ isSubmitting: PropTypes.bool,
+ isChangingUpload: PropTypes.bool,
+ isUploading: PropTypes.bool,
+ onChange: PropTypes.func.isRequired,
+ onSubmit: PropTypes.func.isRequired,
+ onClearSuggestions: PropTypes.func.isRequired,
+ onFetchSuggestions: PropTypes.func.isRequired,
+ onSuggestionSelected: PropTypes.func.isRequired,
+ onChangeSpoilerText: PropTypes.func.isRequired,
+ onPaste: PropTypes.func.isRequired,
+ onPickEmoji: PropTypes.func.isRequired,
+ showSearch: PropTypes.bool,
+ anyMedia: PropTypes.bool,
+ shouldCondense: PropTypes.bool,
+ autoFocus: PropTypes.bool,
+ groupId: PropTypes.string,
+ isModalOpen: PropTypes.bool,
+ scheduledAt: PropTypes.instanceOf(Date),
+ setScheduledAt: PropTypes.func.isRequired,
+ replyToId: PropTypes.string,
+ reduxReplyToId: PropTypes.string,
+ hasPoll: PropTypes.bool,
+ selectedGifSrc: PropTypes.string,
+ isPro: PropTypes.bool,
+ hidePro: PropTypes.bool,
+ autoJoinGroup: PropTypes.bool,
+}
+
+ComposeForm.defaultProps = {
+ showSearch: false,
+}
+
+export default injectIntl(ComposeForm)
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/compose/components/emoji_picker_button.js b/app/javascript/gabsocial/features/compose/components/emoji_picker_button.js
index 9600198b..19008171 100644
--- a/app/javascript/gabsocial/features/compose/components/emoji_picker_button.js
+++ b/app/javascript/gabsocial/features/compose/components/emoji_picker_button.js
@@ -5,37 +5,8 @@ import { defineMessages, injectIntl } from 'react-intl'
import { openPopover } from '../../../actions/popover'
import ComposeExtraButton from './compose_extra_button'
-const messages = defineMessages({
- emoji: { id: 'emoji_button.label', defaultMessage: 'Insert emoji' },
-})
-
-const mapStateToProps = (state) => ({
- active: state.getIn(['popover', 'popoverType']) === 'EMOJI_PICKER',
-})
-
-const mapDispatchToProps = (dispatch) => ({
-
- onClick(targetRef) {
- dispatch(openPopover('EMOJI_PICKER', {
- targetRef,
- }))
- },
-
-})
-
-export default
-@injectIntl
-@connect(mapStateToProps, mapDispatchToProps)
class EmojiPickerButton extends React.PureComponent {
- static propTypes = {
- intl: PropTypes.object.isRequired,
- onClick: PropTypes.func.isRequired,
- active: PropTypes.bool,
- small: PropTypes.bool,
- isMatch: PropTypes.bool,
- }
-
handleClick = (e) => {
e.preventDefault()
this.props.onClick(this.button)
@@ -66,3 +37,31 @@ class EmojiPickerButton extends React.PureComponent {
}
}
+
+const messages = defineMessages({
+ emoji: { id: 'emoji_button.label', defaultMessage: 'Insert emoji' },
+})
+
+const mapStateToProps = (state) => ({
+ active: state.getIn(['popover', 'popoverType']) === 'EMOJI_PICKER',
+})
+
+const mapDispatchToProps = (dispatch) => ({
+
+ onClick(targetRef) {
+ dispatch(openPopover('EMOJI_PICKER', {
+ targetRef,
+ }))
+ },
+
+})
+
+EmojiPickerButton.propTypes = {
+ intl: PropTypes.object.isRequired,
+ onClick: PropTypes.func.isRequired,
+ active: PropTypes.bool,
+ small: PropTypes.bool,
+ isMatch: PropTypes.bool,
+}
+
+export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(EmojiPickerButton))
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/compose/components/expires_post_button.js b/app/javascript/gabsocial/features/compose/components/expires_post_button.js
index 210d983d..e1ebde69 100644
--- a/app/javascript/gabsocial/features/compose/components/expires_post_button.js
+++ b/app/javascript/gabsocial/features/compose/components/expires_post_button.js
@@ -8,42 +8,8 @@ import { me } from '../../../initial_state'
import { POPOVER_STATUS_EXPIRATION_OPTIONS } from '../../../constants'
import ComposeExtraButton from './compose_extra_button'
-const messages = defineMessages({
- expires: { id: 'expiration.title', defaultMessage: 'Add status expiration' },
-})
-
-const mapStateToProps = (state) => ({
- hasScheduledAt: !!state.getIn(['compose', 'scheduled_at']),
- active: !!state.getIn(['compose', 'expires_at']) || state.getIn(['popover', 'popoverType']) === POPOVER_STATUS_EXPIRATION_OPTIONS,
- isPro: state.getIn(['accounts', me, 'is_pro']),
-})
-
-const mapDispatchToProps = (dispatch) => ({
- onOpenExpirationPopover(targetRef) {
- dispatch(openPopover(POPOVER_STATUS_EXPIRATION_OPTIONS, {
- targetRef,
- }))
- },
- onOpenProUpgradeModal() {
- dispatch(openModal('PRO_UPGRADE'))
- },
-})
-
-export default
-@injectIntl
-@connect(mapStateToProps, mapDispatchToProps)
class ExpiresPostButton extends React.PureComponent {
- static propTypes = {
- active: PropTypes.bool.isRequired,
- intl: PropTypes.object.isRequired,
- isPro: PropTypes.bool,
- hasScheduledAt: PropTypes.bool,
- onOpenProUpgradeModal: PropTypes.func.isRequired,
- onOpenExpirationPopover: PropTypes.func.isRequired,
- small: PropTypes.bool,
- }
-
handleToggle = () => {
if (!this.props.isPro) {
this.props.onOpenProUpgradeModal()
@@ -79,3 +45,36 @@ class ExpiresPostButton extends React.PureComponent {
}
}
+
+const messages = defineMessages({
+ expires: { id: 'expiration.title', defaultMessage: 'Add status expiration' },
+})
+
+const mapStateToProps = (state) => ({
+ hasScheduledAt: !!state.getIn(['compose', 'scheduled_at']),
+ active: !!state.getIn(['compose', 'expires_at']) || state.getIn(['popover', 'popoverType']) === POPOVER_STATUS_EXPIRATION_OPTIONS,
+ isPro: state.getIn(['accounts', me, 'is_pro']),
+})
+
+const mapDispatchToProps = (dispatch) => ({
+ onOpenExpirationPopover(targetRef) {
+ dispatch(openPopover(POPOVER_STATUS_EXPIRATION_OPTIONS, {
+ targetRef,
+ }))
+ },
+ onOpenProUpgradeModal() {
+ dispatch(openModal('PRO_UPGRADE'))
+ },
+})
+
+ExpiresPostButton.propTypes = {
+ active: PropTypes.bool.isRequired,
+ intl: PropTypes.object.isRequired,
+ isPro: PropTypes.bool,
+ hasScheduledAt: PropTypes.bool,
+ onOpenProUpgradeModal: PropTypes.func.isRequired,
+ onOpenExpirationPopover: PropTypes.func.isRequired,
+ small: PropTypes.bool,
+}
+
+export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(ExpiresPostButton))
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/compose/components/gif_form.js b/app/javascript/gabsocial/features/compose/components/gif_form.js
index f05c6447..d685c99b 100644
--- a/app/javascript/gabsocial/features/compose/components/gif_form.js
+++ b/app/javascript/gabsocial/features/compose/components/gif_form.js
@@ -4,23 +4,8 @@ import { connect } from 'react-redux'
import { clearSelectedGif } from '../../../actions/tenor'
import Image from '../../../components/image'
-const mapDispatchToProps = (dispatch) => ({
- onClearSelectedGif() {
- dispatch(clearSelectedGif())
- },
-})
-
-export default
-@connect(null, mapDispatchToProps)
class GifForm extends React.PureComponent {
- static propTypes = {
- onClearSelectedGif: PropTypes.func.isRequired,
- replyToId: PropTypes.string,
- small: PropTypes.bool,
- selectedGifSrc: PropTypes.string.isRequired,
- }
-
render () {
const {
selectedGifSrc,
@@ -43,3 +28,18 @@ class GifForm extends React.PureComponent {
}
}
+
+const mapDispatchToProps = (dispatch) => ({
+ onClearSelectedGif() {
+ dispatch(clearSelectedGif())
+ },
+})
+
+GifForm.propTypes = {
+ onClearSelectedGif: PropTypes.func.isRequired,
+ replyToId: PropTypes.string,
+ small: PropTypes.bool,
+ selectedGifSrc: PropTypes.string.isRequired,
+}
+
+export default connect(null, mapDispatchToProps)(GifForm)
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/compose/components/gif_selector_button.js b/app/javascript/gabsocial/features/compose/components/gif_selector_button.js
index 805162b4..33714125 100644
--- a/app/javascript/gabsocial/features/compose/components/gif_selector_button.js
+++ b/app/javascript/gabsocial/features/compose/components/gif_selector_button.js
@@ -5,36 +5,8 @@ import { injectIntl, defineMessages } from 'react-intl'
import ComposeExtraButton from './compose_extra_button'
import { openModal } from '../../../actions/modal'
-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' },
- title: { id: 'compose_form.gif.title', defaultMessage: 'Insert gif' },
-})
-
-const mapStateToProps = (state) => ({
- active: !!state.getIn(['compose', 'gif']) || state.getIn(['modal', 'modalType']) === 'GIF_PICKER',
-})
-
-const mapDispatchToProps = (dispatch) => ({
-
- onClick() {
- dispatch(openModal('GIF_PICKER'))
- },
-
-})
-
-export default
-@injectIntl
-@connect(mapStateToProps, mapDispatchToProps)
class GifSelectorButton extends React.PureComponent {
- static propTypes = {
- intl: PropTypes.object.isRequired,
- onClick: PropTypes.func.isRequired,
- active: PropTypes.bool,
- small: PropTypes.bool,
- }
-
handleClick = (e) => {
e.preventDefault()
this.props.onClick(this.button)
@@ -60,3 +32,30 @@ class GifSelectorButton extends React.PureComponent {
}
}
+
+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' },
+ title: { id: 'compose_form.gif.title', defaultMessage: 'Insert gif' },
+})
+
+const mapStateToProps = (state) => ({
+ active: !!state.getIn(['compose', 'gif']) || state.getIn(['modal', 'modalType']) === 'GIF_PICKER',
+})
+
+const mapDispatchToProps = (dispatch) => ({
+
+ onClick() {
+ dispatch(openModal('GIF_PICKER'))
+ },
+
+})
+
+GifSelectorButton.propTypes = {
+ intl: PropTypes.object.isRequired,
+ onClick: PropTypes.func.isRequired,
+ active: PropTypes.bool,
+ small: PropTypes.bool,
+}
+
+export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(GifSelectorButton))
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/compose/components/media_upload_button.js b/app/javascript/gabsocial/features/compose/components/media_upload_button.js
index 1717cb99..26f6fc19 100644
--- a/app/javascript/gabsocial/features/compose/components/media_upload_button.js
+++ b/app/javascript/gabsocial/features/compose/components/media_upload_button.js
@@ -7,42 +7,8 @@ import { defineMessages, injectIntl } from 'react-intl'
import { uploadCompose } from '../../../actions/compose'
import ComposeExtraButton from './compose_extra_button'
-const messages = defineMessages({
- upload: { id: 'upload_button.label', defaultMessage: 'Add media (JPEG, PNG, GIF, WebM, MP4, MOV)' },
- title: { id: 'upload_button.title', defaultMessage: 'Photo/Video' },
-})
-
-const makeMapStateToProps = () => {
- const mapStateToProps = (state) => ({
- acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']),
- disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size + state.getIn(['compose', 'pending_media_attachments']) > 3 || state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio', 'gifv'].includes(m.get('type')))),
- unavailable: state.getIn(['compose', 'poll']) !== null,
- resetFileKey: state.getIn(['compose', 'resetFileKey']),
- })
-
- return mapStateToProps
-}
-
-const mapDispatchToProps = (dispatch) => ({
- onSelectFile: (files) => dispatch(uploadCompose(files)),
-})
-
-export default
-@connect(makeMapStateToProps, mapDispatchToProps)
-@injectIntl
class UploadButton extends ImmutablePureComponent {
- static propTypes = {
- disabled: PropTypes.bool,
- unavailable: PropTypes.bool,
- onSelectFile: PropTypes.func.isRequired,
- style: PropTypes.object,
- resetFileKey: PropTypes.number,
- acceptContentTypes: ImmutablePropTypes.listOf(PropTypes.string).isRequired,
- intl: PropTypes.object.isRequired,
- small: PropTypes.bool,
- }
-
handleChange = (e) => {
if (e.target.files.length > 0) {
this.props.onSelectFile(e.target.files)
@@ -88,3 +54,36 @@ class UploadButton extends ImmutablePureComponent {
}
}
+
+const messages = defineMessages({
+ upload: { id: 'upload_button.label', defaultMessage: 'Add media (JPEG, PNG, GIF, WebM, MP4, MOV)' },
+ title: { id: 'upload_button.title', defaultMessage: 'Photo/Video' },
+})
+
+const makeMapStateToProps = () => {
+ const mapStateToProps = (state) => ({
+ acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']),
+ disabled: state.getIn(['compose', 'is_uploading']) || (state.getIn(['compose', 'media_attachments']).size + state.getIn(['compose', 'pending_media_attachments']) > 3 || state.getIn(['compose', 'media_attachments']).some(m => ['video', 'audio', 'gifv'].includes(m.get('type')))),
+ unavailable: state.getIn(['compose', 'poll']) !== null,
+ resetFileKey: state.getIn(['compose', 'resetFileKey']),
+ })
+
+ return mapStateToProps
+}
+
+const mapDispatchToProps = (dispatch) => ({
+ onSelectFile: (files) => dispatch(uploadCompose(files)),
+})
+
+UploadButton.propTypes = {
+ disabled: PropTypes.bool,
+ unavailable: PropTypes.bool,
+ onSelectFile: PropTypes.func.isRequired,
+ style: PropTypes.object,
+ resetFileKey: PropTypes.number,
+ acceptContentTypes: ImmutablePropTypes.listOf(PropTypes.string).isRequired,
+ intl: PropTypes.object.isRequired,
+ small: PropTypes.bool,
+}
+
+export default injectIntl(connect(makeMapStateToProps, mapDispatchToProps)(UploadButton))
diff --git a/app/javascript/gabsocial/features/compose/components/media_upload_item.js b/app/javascript/gabsocial/features/compose/components/media_upload_item.js
index 884706e3..c8412bac 100644
--- a/app/javascript/gabsocial/features/compose/components/media_upload_item.js
+++ b/app/javascript/gabsocial/features/compose/components/media_upload_item.js
@@ -14,44 +14,12 @@ import Text from '../../../components/text'
const cx = classNames.bind(_s)
-const messages = defineMessages({
- description: { id: 'upload_form.description', defaultMessage: 'Describe for the visually impaired' },
- delete: { id: 'upload_form.undo', defaultMessage: 'Delete' },
-})
-
-const mapStateToProps = (state, { id }) => ({
- media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id),
-})
-
-const mapDispatchToProps = (dispatch) => ({
- onUndo: (id) => {
- dispatch(undoUploadCompose(id))
- },
- onDescriptionChange: (id, description) => {
- dispatch(changeUploadCompose(id, { description }))
- },
- onSubmit () {
- dispatch(submitCompose())
- },
-});
-
-export default
-@injectIntl
-@connect(mapStateToProps, mapDispatchToProps)
class Upload extends ImmutablePureComponent {
static contextTypes = {
router: PropTypes.object,
}
- static propTypes = {
- media: ImmutablePropTypes.map.isRequired,
- intl: PropTypes.object.isRequired,
- onUndo: PropTypes.func.isRequired,
- onDescriptionChange: PropTypes.func.isRequired,
- onSubmit: PropTypes.func.isRequired,
- }
-
state = {
hovered: false,
focused: false,
@@ -177,3 +145,34 @@ class Upload extends ImmutablePureComponent {
}
}
+
+const messages = defineMessages({
+ description: { id: 'upload_form.description', defaultMessage: 'Describe for the visually impaired' },
+ delete: { id: 'upload_form.undo', defaultMessage: 'Delete' },
+})
+
+const mapStateToProps = (state, { id }) => ({
+ media: state.getIn(['compose', 'media_attachments']).find(item => item.get('id') === id),
+})
+
+const mapDispatchToProps = (dispatch) => ({
+ onUndo: (id) => {
+ dispatch(undoUploadCompose(id))
+ },
+ onDescriptionChange: (id, description) => {
+ dispatch(changeUploadCompose(id, { description }))
+ },
+ onSubmit () {
+ dispatch(submitCompose())
+ },
+});
+
+Upload.propTypes = {
+ media: ImmutablePropTypes.map.isRequired,
+ intl: PropTypes.object.isRequired,
+ onUndo: PropTypes.func.isRequired,
+ onDescriptionChange: PropTypes.func.isRequired,
+ onSubmit: PropTypes.func.isRequired,
+}
+
+export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(Upload))
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/compose/components/poll_button.js b/app/javascript/gabsocial/features/compose/components/poll_button.js
index 9762bd1d..399562b7 100644
--- a/app/javascript/gabsocial/features/compose/components/poll_button.js
+++ b/app/javascript/gabsocial/features/compose/components/poll_button.js
@@ -5,6 +5,31 @@ import { defineMessages, injectIntl } from 'react-intl'
import { addPoll, removePoll } from '../../../actions/compose'
import ComposeExtraButton from './compose_extra_button'
+class PollButton extends React.PureComponent {
+
+ handleClick = () => {
+ this.props.onClick()
+ }
+
+ render() {
+ const { intl, active, unavailable, disabled, small } = this.props
+
+ if (unavailable) return null
+
+ return (
+
+ )
+ }
+
+}
+
const messages = defineMessages({
add_poll: { id: 'poll_button.add_poll', defaultMessage: 'Add poll' },
title: { id: 'poll_button.title', defaultMessage: 'Poll' },
@@ -30,39 +55,13 @@ const mapDispatchToProps = (dispatch) => ({
})
-export default
-@connect(mapStateToProps, mapDispatchToProps)
-@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,
- small: PropTypes.bool,
- }
-
- handleClick = () => {
- this.props.onClick()
- }
-
- render() {
- const { intl, active, unavailable, disabled, small } = this.props
-
- if (unavailable) return null
-
- return (
-
- )
- }
-
+PollButton.propTypes = {
+ disabled: PropTypes.bool,
+ unavailable: PropTypes.bool,
+ active: PropTypes.bool,
+ onClick: PropTypes.func.isRequired,
+ intl: PropTypes.object.isRequired,
+ small: PropTypes.bool,
}
+
+export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(PollButton))
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/compose/components/poll_form.js b/app/javascript/gabsocial/features/compose/components/poll_form.js
index 735b42c9..690238a9 100644
--- a/app/javascript/gabsocial/features/compose/components/poll_form.js
+++ b/app/javascript/gabsocial/features/compose/components/poll_form.js
@@ -18,57 +18,8 @@ import Input from '../../../components/input'
const cx = classNames.bind(_s)
-const messages = defineMessages({
- option_placeholder: { id: 'compose_form.poll.option_placeholder', defaultMessage: 'Choice {number}' },
- add_option: { id: 'compose_form.poll.add_option', defaultMessage: 'Add a choice' },
- remove_option: { id: 'compose_form.poll.remove_option', defaultMessage: 'Remove this choice' },
- poll_duration: { id: 'compose_form.poll.duration', defaultMessage: 'Poll duration' },
- minutes: { id: 'intervals.full.minutes', defaultMessage: '{number, plural, one {# minute} other {# minutes}}' },
- hours: { id: 'intervals.full.hours', defaultMessage: '{number, plural, one {# hour} other {# hours}}' },
- days: { id: 'intervals.full.days', defaultMessage: '{number, plural, one {# day} other {# days}}' },
-})
-
-const mapStateToProps = (state) => ({
- options: state.getIn(['compose', 'poll', 'options']),
- expiresIn: state.getIn(['compose', 'poll', 'expires_in']),
- isMultiple: state.getIn(['compose', 'poll', 'multiple']),
-})
-
-const mapDispatchToProps = (dispatch) => ({
- onAddOption() {
- dispatch(addPollOption(''))
- },
-
- onRemoveOption(index) {
- dispatch(removePollOption(index))
- },
-
- onChangeOption(index, title) {
- dispatch(changePollOption(index, title))
- },
-
- onChangeSettings(expiresIn, isMultiple) {
- dispatch(changePollSettings(expiresIn, isMultiple))
- },
-
-})
-
-export default
-@injectIntl
-@connect(mapStateToProps, mapDispatchToProps)
class PollForm extends ImmutablePureComponent {
- static propTypes = {
- options: ImmutablePropTypes.list,
- expiresIn: PropTypes.number,
- isMultiple: PropTypes.bool,
- onChangeOption: PropTypes.func.isRequired,
- onAddOption: PropTypes.func.isRequired,
- onRemoveOption: PropTypes.func.isRequired,
- onChangeSettings: PropTypes.func.isRequired,
- intl: PropTypes.object.isRequired,
- }
-
handleSelectDuration = (e) => {
this.props.onChangeSettings(e.target.value, this.props.isMultiple)
}
@@ -243,3 +194,51 @@ class PollFormOption extends ImmutablePureComponent {
}
}
+
+const messages = defineMessages({
+ option_placeholder: { id: 'compose_form.poll.option_placeholder', defaultMessage: 'Choice {number}' },
+ add_option: { id: 'compose_form.poll.add_option', defaultMessage: 'Add a choice' },
+ remove_option: { id: 'compose_form.poll.remove_option', defaultMessage: 'Remove this choice' },
+ poll_duration: { id: 'compose_form.poll.duration', defaultMessage: 'Poll duration' },
+ minutes: { id: 'intervals.full.minutes', defaultMessage: '{number, plural, one {# minute} other {# minutes}}' },
+ hours: { id: 'intervals.full.hours', defaultMessage: '{number, plural, one {# hour} other {# hours}}' },
+ days: { id: 'intervals.full.days', defaultMessage: '{number, plural, one {# day} other {# days}}' },
+})
+
+const mapStateToProps = (state) => ({
+ options: state.getIn(['compose', 'poll', 'options']),
+ expiresIn: state.getIn(['compose', 'poll', 'expires_in']),
+ isMultiple: state.getIn(['compose', 'poll', 'multiple']),
+})
+
+const mapDispatchToProps = (dispatch) => ({
+ onAddOption() {
+ dispatch(addPollOption(''))
+ },
+
+ onRemoveOption(index) {
+ dispatch(removePollOption(index))
+ },
+
+ onChangeOption(index, title) {
+ dispatch(changePollOption(index, title))
+ },
+
+ onChangeSettings(expiresIn, isMultiple) {
+ dispatch(changePollSettings(expiresIn, isMultiple))
+ },
+
+})
+
+PollForm.propTypes = {
+ options: ImmutablePropTypes.list,
+ expiresIn: PropTypes.number,
+ isMultiple: PropTypes.bool,
+ onChangeOption: PropTypes.func.isRequired,
+ onAddOption: PropTypes.func.isRequired,
+ onRemoveOption: PropTypes.func.isRequired,
+ onChangeSettings: PropTypes.func.isRequired,
+ intl: PropTypes.object.isRequired,
+}
+
+export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(PollForm))
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/compose/components/rich_text_editor_button.js b/app/javascript/gabsocial/features/compose/components/rich_text_editor_button.js
index 770684df..4b019bad 100644
--- a/app/javascript/gabsocial/features/compose/components/rich_text_editor_button.js
+++ b/app/javascript/gabsocial/features/compose/components/rich_text_editor_button.js
@@ -7,42 +7,8 @@ import { openModal } from '../../../actions/modal'
import { me } from '../../../initial_state'
import ComposeExtraButton from './compose_extra_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' },
- title: { id: 'compose_form.rte.title', defaultMessage: 'Rich Text Editor' },
-})
-
-const mapStateToProps = (state) => ({
- active: state.getIn(['compose', 'rte_controls_visible']),
- isPro: state.getIn(['accounts', me, 'is_pro']),
-})
-
-const mapDispatchToProps = (dispatch) => ({
-
- onChangeRichTextEditorControlsVisibility() {
- dispatch(changeRichTextEditorControlsVisibility())
- },
-
- onOpenProUpgradeModal() {
- dispatch(openModal('PRO_UPGRADE'))
- },
-})
-
-export default
-@injectIntl
-@connect(mapStateToProps, mapDispatchToProps)
class RichTextEditorButton extends React.PureComponent {
- static propTypes = {
- active: PropTypes.bool,
- intl: PropTypes.object.isRequired,
- small: PropTypes.bool,
- isPro: PropTypes.bool,
- onOpenProUpgradeModal: PropTypes.func.isRequired,
- onChangeRichTextEditorControlsVisibility: PropTypes.func.isRequired,
- }
-
handleClick = (e) => {
e.preventDefault()
if (!this.props.isPro) {
@@ -67,3 +33,36 @@ class RichTextEditorButton extends React.PureComponent {
}
}
+
+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' },
+ title: { id: 'compose_form.rte.title', defaultMessage: 'Rich Text Editor' },
+})
+
+const mapStateToProps = (state) => ({
+ active: state.getIn(['compose', 'rte_controls_visible']),
+ isPro: state.getIn(['accounts', me, 'is_pro']),
+})
+
+const mapDispatchToProps = (dispatch) => ({
+
+ onChangeRichTextEditorControlsVisibility() {
+ dispatch(changeRichTextEditorControlsVisibility())
+ },
+
+ onOpenProUpgradeModal() {
+ dispatch(openModal('PRO_UPGRADE'))
+ },
+})
+
+RichTextEditorButton.propTypes = {
+ active: PropTypes.bool,
+ intl: PropTypes.object.isRequired,
+ small: PropTypes.bool,
+ isPro: PropTypes.bool,
+ onOpenProUpgradeModal: PropTypes.func.isRequired,
+ onChangeRichTextEditorControlsVisibility: PropTypes.func.isRequired,
+}
+
+export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(RichTextEditorButton))
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/compose/components/schedule_post_button.js b/app/javascript/gabsocial/features/compose/components/schedule_post_button.js
index 92c7ea8d..9e10bfaf 100644
--- a/app/javascript/gabsocial/features/compose/components/schedule_post_button.js
+++ b/app/javascript/gabsocial/features/compose/components/schedule_post_button.js
@@ -9,48 +9,8 @@ import ComposeExtraButton from './compose_extra_button'
// import 'react-datepicker/dist/react-datepicker.css'
-const messages = defineMessages({
- schedule_status: { id: 'schedule_status.title', defaultMessage: 'Schedule' },
-})
-
-const mapStateToProps = (state) => ({
- hasExpiresAt: !!state.getIn(['compose', 'expires_at']),
- active: !!state.getIn(['compose', 'scheduled_at']) || state.getIn(['popover', 'popoverType']) === 'DATE_PICKER',
- isPro: state.getIn(['accounts', me, 'is_pro']),
-})
-
-const mapDispatchToProps = (dispatch) => ({
- onOpenDatePickerPopover(targetRef) {
- dispatch(openPopover('DATE_PICKER', {
- targetRef,
- }))
- },
-
- onCloseDatePickerPopover() {
- dispatch(closePopover())
- },
-
- onOpenProUpgradeModal() {
- dispatch(openModal('PRO_UPGRADE'))
- },
-})
-
-export default
-@injectIntl
-@connect(mapStateToProps, mapDispatchToProps)
class SchedulePostButton extends React.PureComponent {
- static propTypes = {
- active: PropTypes.bool.isRequired,
- intl: PropTypes.object.isRequired,
- isPro: PropTypes.bool,
- hasExpiresAt: PropTypes.bool,
- onOpenProUpgradeModal: PropTypes.func.isRequired,
- onOpenDatePickerPopover: PropTypes.func.isRequired,
- onCloseDatePickerPopover: PropTypes.func.isRequired,
- small: PropTypes.bool,
- }
-
handleToggle = () => {
if (!this.props.isPro) {
this.props.onOpenProUpgradeModal()
@@ -86,3 +46,42 @@ class SchedulePostButton extends React.PureComponent {
}
}
+
+const messages = defineMessages({
+ schedule_status: { id: 'schedule_status.title', defaultMessage: 'Schedule' },
+})
+
+const mapStateToProps = (state) => ({
+ hasExpiresAt: !!state.getIn(['compose', 'expires_at']),
+ active: !!state.getIn(['compose', 'scheduled_at']) || state.getIn(['popover', 'popoverType']) === 'DATE_PICKER',
+ isPro: state.getIn(['accounts', me, 'is_pro']),
+})
+
+const mapDispatchToProps = (dispatch) => ({
+ onOpenDatePickerPopover(targetRef) {
+ dispatch(openPopover('DATE_PICKER', {
+ targetRef,
+ }))
+ },
+
+ onCloseDatePickerPopover() {
+ dispatch(closePopover())
+ },
+
+ onOpenProUpgradeModal() {
+ dispatch(openModal('PRO_UPGRADE'))
+ },
+})
+
+SchedulePostButton.propTypes = {
+ active: PropTypes.bool.isRequired,
+ intl: PropTypes.object.isRequired,
+ isPro: PropTypes.bool,
+ hasExpiresAt: PropTypes.bool,
+ onOpenProUpgradeModal: PropTypes.func.isRequired,
+ onOpenDatePickerPopover: PropTypes.func.isRequired,
+ onCloseDatePickerPopover: PropTypes.func.isRequired,
+ small: PropTypes.bool,
+}
+
+export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(SchedulePostButton))
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/compose/components/sensitive_media_button.js b/app/javascript/gabsocial/features/compose/components/sensitive_media_button.js
index e625f9b0..339f9c3b 100644
--- a/app/javascript/gabsocial/features/compose/components/sensitive_media_button.js
+++ b/app/javascript/gabsocial/features/compose/components/sensitive_media_button.js
@@ -5,35 +5,8 @@ import { injectIntl, defineMessages } from 'react-intl'
import { changeComposeSensitivity } from '../../../actions/compose'
import Switch from '../../../components/switch'
-const messages = defineMessages({
- markAsSensitive: { id: 'compose_form.sensitive.hide', defaultMessage: 'Mark media as sensitive' },
-})
-
-const mapStateToProps = (state) => ({
- active: state.getIn(['compose', 'sensitive']),
- disabled: state.getIn(['compose', 'spoiler']),
-})
-
-const mapDispatchToProps = (dispatch) => ({
-
- onClick () {
- dispatch(changeComposeSensitivity())
- },
-
-})
-
-export default
-@injectIntl
-@connect(mapStateToProps, mapDispatchToProps)
class SensitiveMediaButton extends React.PureComponent {
- static propTypes = {
- active: PropTypes.bool,
- disabled: PropTypes.bool,
- onClick: PropTypes.func.isRequired,
- intl: PropTypes.object.isRequired,
- }
-
render () {
const { active, disabled, onClick, intl } = this.props
@@ -52,3 +25,29 @@ class SensitiveMediaButton extends React.PureComponent {
}
}
+
+const messages = defineMessages({
+ markAsSensitive: { id: 'compose_form.sensitive.hide', defaultMessage: 'Mark media as sensitive' },
+})
+
+const mapStateToProps = (state) => ({
+ active: state.getIn(['compose', 'sensitive']),
+ disabled: state.getIn(['compose', 'spoiler']),
+})
+
+const mapDispatchToProps = (dispatch) => ({
+
+ onClick () {
+ dispatch(changeComposeSensitivity())
+ },
+
+})
+
+SensitiveMediaButton.propTypes = {
+ active: PropTypes.bool,
+ disabled: PropTypes.bool,
+ onClick: PropTypes.func.isRequired,
+ intl: PropTypes.object.isRequired,
+}
+
+export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(SensitiveMediaButton))
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/compose/components/spoiler_button.js b/app/javascript/gabsocial/features/compose/components/spoiler_button.js
index f6375290..7db57cb2 100644
--- a/app/javascript/gabsocial/features/compose/components/spoiler_button.js
+++ b/app/javascript/gabsocial/features/compose/components/spoiler_button.js
@@ -5,35 +5,8 @@ import { injectIntl, defineMessages } from 'react-intl'
import { changeComposeSpoilerness } from '../../../actions/compose'
import ComposeExtraButton from './compose_extra_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' },
- title: { id: 'compose_form.spoiler.title', defaultMessage: 'Warning' },
-})
-
-const mapStateToProps = (state) => ({
- active: state.getIn(['compose', 'spoiler']),
-})
-
-const mapDispatchToProps = (dispatch) => ({
-
- onClick () {
- dispatch(changeComposeSpoilerness())
- },
-
-})
-
-export default
-@injectIntl
-@connect(mapStateToProps, mapDispatchToProps)
class SpoilerButton extends React.PureComponent {
- static propTypes = {
- active: PropTypes.bool,
- intl: PropTypes.object.isRequired,
- small: PropTypes.bool,
- }
-
handleClick = (e) => {
e.preventDefault()
this.props.onClick()
@@ -54,3 +27,29 @@ class SpoilerButton extends React.PureComponent {
}
}
+
+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' },
+ title: { id: 'compose_form.spoiler.title', defaultMessage: 'Warning' },
+})
+
+const mapStateToProps = (state) => ({
+ active: state.getIn(['compose', 'spoiler']),
+})
+
+const mapDispatchToProps = (dispatch) => ({
+
+ onClick () {
+ dispatch(changeComposeSpoilerness())
+ },
+
+})
+
+SpoilerButton.propTypes = {
+ active: PropTypes.bool,
+ intl: PropTypes.object.isRequired,
+ small: PropTypes.bool,
+}
+
+export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(SpoilerButton))
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/compose/components/status_visibility_button.js b/app/javascript/gabsocial/features/compose/components/status_visibility_button.js
index 94e43218..8cd9a384 100644
--- a/app/javascript/gabsocial/features/compose/components/status_visibility_button.js
+++ b/app/javascript/gabsocial/features/compose/components/status_visibility_button.js
@@ -5,38 +5,8 @@ import { defineMessages, injectIntl } from 'react-intl'
import { openPopover } from '../../../actions/popover'
import ComposeExtraButton from './compose_extra_button'
-const messages = defineMessages({
- visibility: { id: 'privacy.visibility', defaultMessage: 'Visibility' },
-})
-
-const mapStateToProps = (state) => ({
- value: state.getIn(['compose', 'privacy']),
-})
-
-const mapDispatchToProps = (dispatch) => ({
- onOpenPopover(targetRef) {
- dispatch(openPopover('STATUS_VISIBILITY', {
- targetRef,
- }))
- },
-})
-
-export default
-@connect(mapStateToProps, mapDispatchToProps)
-@injectIntl
class StatusVisibilityButton extends React.PureComponent {
- static propTypes = {
- intl: PropTypes.object.isRequired,
- small: PropTypes.bool,
- onOpenPopover: PropTypes.func.isRequired,
- value: PropTypes.oneOf([
- 'private',
- 'unlisted',
- 'public',
- ]),
- }
-
handleOnClick = () => {
this.props.onOpenPopover(this.button)
}
@@ -77,3 +47,32 @@ class StatusVisibilityButton extends React.PureComponent {
}
}
+
+const messages = defineMessages({
+ visibility: { id: 'privacy.visibility', defaultMessage: 'Visibility' },
+})
+
+const mapStateToProps = (state) => ({
+ value: state.getIn(['compose', 'privacy']),
+})
+
+const mapDispatchToProps = (dispatch) => ({
+ onOpenPopover(targetRef) {
+ dispatch(openPopover('STATUS_VISIBILITY', {
+ targetRef,
+ }))
+ },
+})
+
+StatusVisibilityButton.propTypes = {
+ intl: PropTypes.object.isRequired,
+ small: PropTypes.bool,
+ onOpenPopover: PropTypes.func.isRequired,
+ value: PropTypes.oneOf([
+ 'private',
+ 'unlisted',
+ 'public',
+ ]),
+}
+
+export default injectIntl(connect(mapStateToProps, mapDispatchToProps)(StatusVisibilityButton))
diff --git a/app/javascript/gabsocial/features/compose/components/upload_form.js b/app/javascript/gabsocial/features/compose/components/upload_form.js
index 62657d3c..5e7dc061 100644
--- a/app/javascript/gabsocial/features/compose/components/upload_form.js
+++ b/app/javascript/gabsocial/features/compose/components/upload_form.js
@@ -7,23 +7,8 @@ import ProgressBar from '../../../components/progress_bar'
import Upload from './media_upload_item'
import SensitiveMediaButton from './sensitive_media_button'
-const mapStateToProps = (state) => ({
- mediaIds: state.getIn(['compose', 'media_attachments']).map(item => item.get('id')),
- isUploading: state.getIn(['compose', 'is_uploading']),
- uploadProgress: state.getIn(['compose', 'progress'], 0),
-});
-
-export default
-@connect(mapStateToProps)
class UploadForm extends ImmutablePureComponent {
- static propTypes = {
- isModalOpen: PropTypes.bool,
- isUploading: PropTypes.bool,
- mediaIds: ImmutablePropTypes.list.isRequired,
- uploadProgress: PropTypes.number,
- };
-
render () {
const {
mediaIds,
@@ -55,3 +40,18 @@ class UploadForm extends ImmutablePureComponent {
}
}
+
+const mapStateToProps = (state) => ({
+ mediaIds: state.getIn(['compose', 'media_attachments']).map(item => item.get('id')),
+ isUploading: state.getIn(['compose', 'is_uploading']),
+ uploadProgress: state.getIn(['compose', 'progress'], 0),
+})
+
+UploadForm.propTypes = {
+ isModalOpen: PropTypes.bool,
+ isUploading: PropTypes.bool,
+ mediaIds: ImmutablePropTypes.list.isRequired,
+ uploadProgress: PropTypes.number,
+}
+
+export default connect(mapStateToProps)(UploadForm)
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/compose/compose.js b/app/javascript/gabsocial/features/compose/compose.js
index 75070575..3e64cde5 100644
--- a/app/javascript/gabsocial/features/compose/compose.js
+++ b/app/javascript/gabsocial/features/compose/compose.js
@@ -4,18 +4,8 @@ import { connect } from 'react-redux'
import { clearCompose } from '../../actions/compose'
import ComposeFormContainer from './containers/compose_form_container'
-const mapDispatchToProps = (dispatch) => ({
- onClearCompose:() => dispatch(clearCompose())
-})
-
-export default
-@connect(null, mapDispatchToProps)
class Compose extends React.PureComponent {
- static propTypes = {
- onClearCompose: PropTypes.func.isRequired,
- }
-
componentWillUnmount() {
this.props.onClearCompose()
}
@@ -29,3 +19,13 @@ class Compose extends React.PureComponent {
}
}
+
+const mapDispatchToProps = (dispatch) => ({
+ onClearCompose:() => dispatch(clearCompose())
+})
+
+Compose.propTypes = {
+ onClearCompose: PropTypes.func.isRequired,
+}
+
+export default connect(null, mapDispatchToProps)(Compose)
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/ui/ui.js b/app/javascript/gabsocial/features/ui/ui.js
index d752891c..c384d3e1 100644
--- a/app/javascript/gabsocial/features/ui/ui.js
+++ b/app/javascript/gabsocial/features/ui/ui.js
@@ -131,12 +131,6 @@ const keyMap = {
class SwitchingArea extends React.PureComponent {
- static propTypes = {
- children: PropTypes.node,
- location: PropTypes.object,
- onLayoutChange: PropTypes.func.isRequired,
- }
-
componentDidMount() {
window.addEventListener('resize', this.handleResize, {
passive: true
@@ -264,26 +258,18 @@ class SwitchingArea extends React.PureComponent {
}
}
-export default
-@connect(mapStateToProps)
-@injectIntl
-@withRouter
+SwitchingArea.propTypes = {
+ children: PropTypes.node,
+ location: PropTypes.object,
+ onLayoutChange: PropTypes.func.isRequired,
+}
+
class UI extends React.PureComponent {
static contextTypes = {
router: PropTypes.object.isRequired,
}
- static propTypes = {
- dispatch: PropTypes.func.isRequired,
- children: PropTypes.node,
- isComposing: PropTypes.bool,
- hasComposingText: PropTypes.bool,
- hasMediaAttachments: PropTypes.bool,
- location: PropTypes.object,
- intl: PropTypes.object.isRequired,
- }
-
state = {
fetchedHome: false,
fetchedNotifications: false,
@@ -589,3 +575,15 @@ class UI extends React.PureComponent {
}
}
+
+UI.propTypes = {
+ dispatch: PropTypes.func.isRequired,
+ children: PropTypes.node,
+ isComposing: PropTypes.bool,
+ hasComposingText: PropTypes.bool,
+ hasMediaAttachments: PropTypes.bool,
+ location: PropTypes.object,
+ intl: PropTypes.object.isRequired,
+}
+
+export default injectIntl(withRouter(connect(mapStateToProps)(UI)))
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/ui/util/bundle.js b/app/javascript/gabsocial/features/ui/util/bundle.js
index 736ac169..125074dd 100644
--- a/app/javascript/gabsocial/features/ui/util/bundle.js
+++ b/app/javascript/gabsocial/features/ui/util/bundle.js
@@ -7,45 +7,11 @@ import {
fetchBundleFail,
} from '../../../actions/bundles'
-const mapDispatchToProps = (dispatch) => ({
- onFetch() {
- dispatch(fetchBundleRequest())
- },
- onFetchSuccess() {
- dispatch(fetchBundleSuccess())
- },
- onFetchFail(error) {
- dispatch(fetchBundleFail(error))
- },
-})
-
const emptyComponent = () => null
const noop = () => { }
-export default
-@connect(null, mapDispatchToProps)
class Bundle extends React.PureComponent {
- static propTypes = {
- fetchComponent: PropTypes.func.isRequired,
- loading: PropTypes.func,
- error: PropTypes.func,
- children: PropTypes.func.isRequired,
- renderDelay: PropTypes.number,
- onFetch: PropTypes.func,
- onFetchSuccess: PropTypes.func,
- onFetchFail: PropTypes.func,
- }
-
- static defaultProps = {
- loading: emptyComponent,
- error: emptyComponent,
- renderDelay: 0,
- onFetch: noop,
- onFetchSuccess: noop,
- onFetchFail: noop,
- }
-
static cache = new Map
state = {
@@ -145,3 +111,37 @@ class Bundle extends React.PureComponent {
}
}
+
+const mapDispatchToProps = (dispatch) => ({
+ onFetch() {
+ dispatch(fetchBundleRequest())
+ },
+ onFetchSuccess() {
+ dispatch(fetchBundleSuccess())
+ },
+ onFetchFail(error) {
+ dispatch(fetchBundleFail(error))
+ },
+})
+
+Bundle.propTypes = {
+ fetchComponent: PropTypes.func.isRequired,
+ loading: PropTypes.func,
+ error: PropTypes.func,
+ children: PropTypes.func.isRequired,
+ renderDelay: PropTypes.number,
+ onFetch: PropTypes.func,
+ onFetchSuccess: PropTypes.func,
+ onFetchFail: PropTypes.func,
+}
+
+Bundle.defaultProps = {
+ loading: emptyComponent,
+ error: emptyComponent,
+ renderDelay: 0,
+ onFetch: noop,
+ onFetchSuccess: noop,
+ onFetchFail: noop,
+}
+
+export default connect(null, mapDispatchToProps)(Bundle)
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/ui/util/reduced_motion.js b/app/javascript/gabsocial/features/ui/util/reduced_motion.js
index 1eca4eff..e16712a1 100644
--- a/app/javascript/gabsocial/features/ui/util/reduced_motion.js
+++ b/app/javascript/gabsocial/features/ui/util/reduced_motion.js
@@ -13,12 +13,6 @@ const extractValue = (value) => {
class ReducedMotion extends React.PureComponent {
- static propTypes = {
- defaultStyle: PropTypes.object,
- style: PropTypes.object,
- children: PropTypes.func,
- }
-
render() {
const { style, defaultStyle, children } = this.props;
@@ -41,4 +35,10 @@ class ReducedMotion extends React.PureComponent {
}
-export default ReducedMotion;
+ReducedMotion.propTypes = {
+ defaultStyle: PropTypes.object,
+ style: PropTypes.object,
+ children: PropTypes.func,
+}
+
+export default ReducedMotion
diff --git a/app/javascript/gabsocial/features/ui/util/responsive_classes_component.js b/app/javascript/gabsocial/features/ui/util/responsive_classes_component.js
index 1ff2e753..dd15be99 100644
--- a/app/javascript/gabsocial/features/ui/util/responsive_classes_component.js
+++ b/app/javascript/gabsocial/features/ui/util/responsive_classes_component.js
@@ -11,16 +11,7 @@ import { getWindowDimension } from '../../../utils/is_mobile'
const initialState = getWindowDimension()
-export default class ResponsiveClassesComponent extends React.PureComponent {
-
- static propTypes = {
- classNames: PropTypes.string,
- classNamesXL: PropTypes.string,
- classNamesLarge: PropTypes.string,
- classNamesMedium: PropTypes.string,
- classNamesSmall: PropTypes.string,
- classNamesXS: PropTypes.string,
- }
+class ResponsiveClassesComponent extends React.PureComponent {
state = {
width: initialState.width,
@@ -75,4 +66,15 @@ export default class ResponsiveClassesComponent extends React.PureComponent {
)
}
-}
\ No newline at end of file
+}
+
+ResponsiveClassesComponent.propTypes = {
+ classNames: PropTypes.string,
+ classNamesXL: PropTypes.string,
+ classNamesLarge: PropTypes.string,
+ classNamesMedium: PropTypes.string,
+ classNamesSmall: PropTypes.string,
+ classNamesXS: PropTypes.string,
+}
+
+export default ResponsiveClassesComponent
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/ui/util/responsive_component.js b/app/javascript/gabsocial/features/ui/util/responsive_component.js
index d15d7431..3c99d843 100644
--- a/app/javascript/gabsocial/features/ui/util/responsive_component.js
+++ b/app/javascript/gabsocial/features/ui/util/responsive_component.js
@@ -4,17 +4,7 @@ import { getWindowDimension } from '../../../utils/is_mobile'
const initialState = getWindowDimension()
-export default class Responsive extends React.PureComponent {
-
- static propTypes = {
- min: PropTypes.number,
- max: PropTypes.number,
- }
-
- static defaultProps = {
- min: 0,
- max: Infinity,
- }
+class Responsive extends React.PureComponent {
state = {
width: initialState.width,
@@ -48,4 +38,16 @@ export default class Responsive extends React.PureComponent {
return shouldRender ? children : null
}
-}
\ No newline at end of file
+}
+
+Responsive.propTypes = {
+ min: PropTypes.number,
+ max: PropTypes.number,
+}
+
+Responsive.defaultProps = {
+ min: 0,
+ max: Infinity,
+}
+
+export default Responsive
\ No newline at end of file
diff --git a/app/javascript/gabsocial/features/ui/util/wrapped_route.js b/app/javascript/gabsocial/features/ui/util/wrapped_route.js
index 564fbbeb..36c27196 100644
--- a/app/javascript/gabsocial/features/ui/util/wrapped_route.js
+++ b/app/javascript/gabsocial/features/ui/util/wrapped_route.js
@@ -6,18 +6,7 @@ import BundleColumnError from '../../../components/bundle_column_error'
import Bundle from './bundle'
import { me } from '../../../initial_state'
-export default class WrappedRoute extends React.PureComponent {
- static propTypes = {
- component: PropTypes.func.isRequired,
- page: PropTypes.func.isRequired,
- content: PropTypes.node,
- componentParams: PropTypes.object,
- publicRoute: PropTypes.bool,
- }
-
- static defaultProps = {
- componentParams: {},
- }
+class WrappedRoute extends React.PureComponent {
renderComponent = ({ match }) => {
const {
@@ -74,3 +63,17 @@ export default class WrappedRoute extends React.PureComponent {
return
}
}
+
+WrappedRoute.propTypes = {
+ component: PropTypes.func.isRequired,
+ page: PropTypes.func.isRequired,
+ content: PropTypes.node,
+ componentParams: PropTypes.object,
+ publicRoute: PropTypes.bool,
+}
+
+WrappedRoute.defaultProps = {
+ componentParams: {},
+}
+
+export default WrappedRoute
\ No newline at end of file
diff --git a/app/javascript/gabsocial/layouts/about_layout.js b/app/javascript/gabsocial/layouts/about_layout.js
index 5aa3b951..1378db18 100644
--- a/app/javascript/gabsocial/layouts/about_layout.js
+++ b/app/javascript/gabsocial/layouts/about_layout.js
@@ -17,11 +17,7 @@ import {
SidebarXS,
} from '../features/ui/util/async_components'
-export default class SettingsLayout extends React.PureComponent {
-
- static propTypes = {
- title: PropTypes.string,
- }
+class SettingsLayout extends React.PureComponent {
componentWillMount() {
this.menuItems = [
@@ -135,3 +131,9 @@ export default class SettingsLayout extends React.PureComponent {
}
}
+
+SettingsLayout.propTypes = {
+ title: PropTypes.string,
+}
+
+export default SettingsLayout
\ No newline at end of file
diff --git a/app/javascript/gabsocial/layouts/explore_layout.js b/app/javascript/gabsocial/layouts/explore_layout.js
index 8326c043..d315964b 100644
--- a/app/javascript/gabsocial/layouts/explore_layout.js
+++ b/app/javascript/gabsocial/layouts/explore_layout.js
@@ -16,17 +16,7 @@ import {
TrendsPanel,
} from '../features/ui/util/async_components'
-export default class ExploreLayout extends ImmutablePureComponent {
-
- static propTypes = {
- actions: PropTypes.array,
- children: PropTypes.node,
- group: ImmutablePropTypes.map,
- groupId: PropTypes.string,
- layout: PropTypes.object,
- relationships: ImmutablePropTypes.map,
- title: PropTypes.string,
- }
+class ExploreLayout extends ImmutablePureComponent {
state = {
lazyLoaded: false,
@@ -125,4 +115,16 @@ export default class ExploreLayout extends ImmutablePureComponent {
)
}
-}
\ No newline at end of file
+}
+
+ExploreLayout.propTypes = {
+ actions: PropTypes.array,
+ children: PropTypes.node,
+ group: ImmutablePropTypes.map,
+ groupId: PropTypes.string,
+ layout: PropTypes.object,
+ relationships: ImmutablePropTypes.map,
+ title: PropTypes.string,
+}
+
+export default ExploreLayout
\ No newline at end of file
diff --git a/app/javascript/gabsocial/layouts/profile_layout.js b/app/javascript/gabsocial/layouts/profile_layout.js
index e6f7be13..c853780d 100644
--- a/app/javascript/gabsocial/layouts/profile_layout.js
+++ b/app/javascript/gabsocial/layouts/profile_layout.js
@@ -23,15 +23,7 @@ import {
SignUpPanel,
} from '../features/ui/util/async_components'
-export default class ProfileLayout extends ImmutablePureComponent {
-
- static propTypes = {
- account: ImmutablePropTypes.map,
- children: PropTypes.node.isRequired,
- titleHTML: PropTypes.string,
- unavailable: PropTypes.bool,
- noSidebar: PropTypes.bool,
- }
+class ProfileLayout extends ImmutablePureComponent {
render() {
const {
@@ -152,4 +144,14 @@ export default class ProfileLayout extends ImmutablePureComponent {
)
}
-}
\ No newline at end of file
+}
+
+ProfileLayout.propTypes = {
+ account: ImmutablePropTypes.map,
+ children: PropTypes.node.isRequired,
+ titleHTML: PropTypes.string,
+ unavailable: PropTypes.bool,
+ noSidebar: PropTypes.bool,
+}
+
+export default ProfileLayout
\ No newline at end of file
diff --git a/app/javascript/gabsocial/layouts/settings_layout.js b/app/javascript/gabsocial/layouts/settings_layout.js
index f89d6df5..1be81b29 100644
--- a/app/javascript/gabsocial/layouts/settings_layout.js
+++ b/app/javascript/gabsocial/layouts/settings_layout.js
@@ -15,11 +15,7 @@ import {
SidebarXS,
} from '../features/ui/util/async_components'
-export default class SettingsLayout extends React.PureComponent {
-
- static propTypes = {
- title: PropTypes.string,
- }
+class SettingsLayout extends React.PureComponent {
render() {
const { children, title } = this.props
@@ -85,3 +81,9 @@ export default class SettingsLayout extends React.PureComponent {
}
}
+
+SettingsLayout.propTypes = {
+ title: PropTypes.string,
+}
+
+export default SettingsLayout
\ No newline at end of file