@@ -1,7 +1,9 @@ | |||||
--- | --- | ||||
root: true | |||||
env: | env: | ||||
browser: true | browser: true | ||||
node: false | |||||
node: true | |||||
es6: true | es6: true | ||||
parser: babel-eslint | parser: babel-eslint | ||||
@@ -52,8 +54,14 @@ rules: | |||||
no-mixed-spaces-and-tabs: warn | no-mixed-spaces-and-tabs: warn | ||||
no-nested-ternary: warn | no-nested-ternary: warn | ||||
no-trailing-spaces: warn | no-trailing-spaces: warn | ||||
no-undef: error | |||||
no-unreachable: error | no-unreachable: error | ||||
no-unused-expressions: error | no-unused-expressions: error | ||||
no-unused-vars: | |||||
- error | |||||
- vars: all | |||||
args: after-used | |||||
ignoreRestSiblings: true | |||||
object-curly-spacing: | object-curly-spacing: | ||||
- error | - error | ||||
- always | - always | ||||
@@ -81,7 +89,10 @@ rules: | |||||
- 2 | - 2 | ||||
react/jsx-no-bind: error | react/jsx-no-bind: error | ||||
react/jsx-no-duplicate-props: error | react/jsx-no-duplicate-props: error | ||||
react/jsx-no-undef: error | |||||
react/jsx-tag-spacing: error | react/jsx-tag-spacing: error | ||||
react/jsx-uses-react: error | |||||
react/jsx-uses-vars: error | |||||
react/jsx-wrap-multilines: error | react/jsx-wrap-multilines: error | ||||
react/no-multi-comp: off | react/no-multi-comp: off | ||||
react/no-string-refs: error | react/no-string-refs: error | ||||
@@ -1,5 +1,4 @@ | |||||
import api, { getLinks } from '../api'; | import api, { getLinks } from '../api'; | ||||
import Immutable from 'immutable'; | |||||
export const ACCOUNT_FETCH_REQUEST = 'ACCOUNT_FETCH_REQUEST'; | export const ACCOUNT_FETCH_REQUEST = 'ACCOUNT_FETCH_REQUEST'; | ||||
export const ACCOUNT_FETCH_SUCCESS = 'ACCOUNT_FETCH_SUCCESS'; | export const ACCOUNT_FETCH_SUCCESS = 'ACCOUNT_FETCH_SUCCESS'; | ||||
@@ -597,7 +596,7 @@ export function authorizeFollowRequest(id) { | |||||
api(getState) | api(getState) | ||||
.post(`/api/v1/follow_requests/${id}/authorize`) | .post(`/api/v1/follow_requests/${id}/authorize`) | ||||
.then(response => dispatch(authorizeFollowRequestSuccess(id))) | |||||
.then(() => dispatch(authorizeFollowRequestSuccess(id))) | |||||
.catch(error => dispatch(authorizeFollowRequestFail(id, error))); | .catch(error => dispatch(authorizeFollowRequestFail(id, error))); | ||||
}; | }; | ||||
}; | }; | ||||
@@ -631,7 +630,7 @@ export function rejectFollowRequest(id) { | |||||
api(getState) | api(getState) | ||||
.post(`/api/v1/follow_requests/${id}/reject`) | .post(`/api/v1/follow_requests/${id}/reject`) | ||||
.then(response => dispatch(rejectFollowRequestSuccess(id))) | |||||
.then(() => dispatch(rejectFollowRequestSuccess(id))) | |||||
.catch(error => dispatch(rejectFollowRequestFail(id, error))); | .catch(error => dispatch(rejectFollowRequestFail(id, error))); | ||||
}; | }; | ||||
}; | }; | ||||
@@ -16,7 +16,7 @@ export function blockDomain(domain, accountId) { | |||||
return (dispatch, getState) => { | return (dispatch, getState) => { | ||||
dispatch(blockDomainRequest(domain)); | dispatch(blockDomainRequest(domain)); | ||||
api(getState).post('/api/v1/domain_blocks', { domain }).then(response => { | |||||
api(getState).post('/api/v1/domain_blocks', { domain }).then(() => { | |||||
dispatch(blockDomainSuccess(domain, accountId)); | dispatch(blockDomainSuccess(domain, accountId)); | ||||
}).catch(err => { | }).catch(err => { | ||||
dispatch(blockDomainFail(domain, err)); | dispatch(blockDomainFail(domain, err)); | ||||
@@ -51,7 +51,7 @@ export function unblockDomain(domain, accountId) { | |||||
return (dispatch, getState) => { | return (dispatch, getState) => { | ||||
dispatch(unblockDomainRequest(domain)); | dispatch(unblockDomainRequest(domain)); | ||||
api(getState).delete('/api/v1/domain_blocks', { params: { domain } }).then(response => { | |||||
api(getState).delete('/api/v1/domain_blocks', { params: { domain } }).then(() => { | |||||
dispatch(unblockDomainSuccess(domain, accountId)); | dispatch(unblockDomainSuccess(domain, accountId)); | ||||
}).catch(err => { | }).catch(err => { | ||||
dispatch(unblockDomainFail(domain, err)); | dispatch(unblockDomainFail(domain, err)); | ||||
@@ -17,7 +17,7 @@ export const NOTIFICATIONS_EXPAND_FAIL = 'NOTIFICATIONS_EXPAND_FAIL'; | |||||
export const NOTIFICATIONS_CLEAR = 'NOTIFICATIONS_CLEAR'; | export const NOTIFICATIONS_CLEAR = 'NOTIFICATIONS_CLEAR'; | ||||
export const NOTIFICATIONS_SCROLL_TOP = 'NOTIFICATIONS_SCROLL_TOP'; | export const NOTIFICATIONS_SCROLL_TOP = 'NOTIFICATIONS_SCROLL_TOP'; | ||||
const messages = defineMessages({ | |||||
defineMessages({ | |||||
mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' }, | mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' }, | ||||
}); | }); | ||||
@@ -74,7 +74,7 @@ export function deleteStatus(id) { | |||||
return (dispatch, getState) => { | return (dispatch, getState) => { | ||||
dispatch(deleteStatusRequest(id)); | dispatch(deleteStatusRequest(id)); | ||||
api(getState).delete(`/api/v1/statuses/${id}`).then(response => { | |||||
api(getState).delete(`/api/v1/statuses/${id}`).then(() => { | |||||
dispatch(deleteStatusSuccess(id)); | dispatch(deleteStatusSuccess(id)); | ||||
dispatch(deleteFromTimelines(id)); | dispatch(deleteFromTimelines(id)); | ||||
}).catch(error => { | }).catch(error => { | ||||
@@ -152,7 +152,7 @@ export function muteStatus(id) { | |||||
return (dispatch, getState) => { | return (dispatch, getState) => { | ||||
dispatch(muteStatusRequest(id)); | dispatch(muteStatusRequest(id)); | ||||
api(getState).post(`/api/v1/statuses/${id}/mute`).then(response => { | |||||
api(getState).post(`/api/v1/statuses/${id}/mute`).then(() => { | |||||
dispatch(muteStatusSuccess(id)); | dispatch(muteStatusSuccess(id)); | ||||
}).catch(error => { | }).catch(error => { | ||||
dispatch(muteStatusFail(id, error)); | dispatch(muteStatusFail(id, error)); | ||||
@@ -186,7 +186,7 @@ export function unmuteStatus(id) { | |||||
return (dispatch, getState) => { | return (dispatch, getState) => { | ||||
dispatch(unmuteStatusRequest(id)); | dispatch(unmuteStatusRequest(id)); | ||||
api(getState).post(`/api/v1/statuses/${id}/unmute`).then(response => { | |||||
api(getState).post(`/api/v1/statuses/${id}/unmute`).then(() => { | |||||
dispatch(unmuteStatusSuccess(id)); | dispatch(unmuteStatusSuccess(id)); | ||||
}).catch(error => { | }).catch(error => { | ||||
dispatch(unmuteStatusFail(id, error)); | dispatch(unmuteStatusFail(id, error)); | ||||
@@ -56,7 +56,7 @@ class DropdownMenu extends React.PureComponent { | |||||
return <li key={`sep-${i}`} className='dropdown__sep' />; | return <li key={`sep-${i}`} className='dropdown__sep' />; | ||||
} | } | ||||
const { text, action, href = '#' } = item; | |||||
const { text, href = '#' } = item; | |||||
return ( | return ( | ||||
<li className='dropdown__content-list-item' key={`${text}-${i}`}> | <li className='dropdown__content-list-item' key={`${text}-${i}`}> | ||||
@@ -138,7 +138,7 @@ class MediaGallery extends React.PureComponent { | |||||
visible: !this.props.sensitive, | visible: !this.props.sensitive, | ||||
}; | }; | ||||
handleOpen = (e) => { | |||||
handleOpen = () => { | |||||
this.setState({ visible: !this.state.visible }); | this.setState({ visible: !this.state.visible }); | ||||
} | } | ||||
@@ -7,7 +7,6 @@ import RelativeTimestamp from './relative_timestamp'; | |||||
import DisplayName from './display_name'; | import DisplayName from './display_name'; | ||||
import MediaGallery from './media_gallery'; | import MediaGallery from './media_gallery'; | ||||
import VideoPlayer from './video_player'; | import VideoPlayer from './video_player'; | ||||
import AttachmentList from './attachment_list'; | |||||
import StatusContent from './status_content'; | import StatusContent from './status_content'; | ||||
import StatusActionBar from './status_action_bar'; | import StatusActionBar from './status_action_bar'; | ||||
import { FormattedMessage } from 'react-intl'; | import { FormattedMessage } from 'react-intl'; | ||||
@@ -32,7 +32,6 @@ class StatusContent extends React.PureComponent { | |||||
for (var i = 0; i < links.length; ++i) { | for (var i = 0; i < links.length; ++i) { | ||||
let link = links[i]; | let link = links[i]; | ||||
let mention = this.props.status.get('mentions').find(item => link.href === item.get('url')); | let mention = this.props.status.get('mentions').find(item => link.href === item.get('url')); | ||||
let media = this.props.status.get('media_attachments').find(item => link.href === item.get('text_url') || (item.get('remote_url').length > 0 && link.href === item.get('remote_url'))); | |||||
if (mention) { | if (mention) { | ||||
link.addEventListener('click', this.onMentionClick.bind(this, mention), false); | link.addEventListener('click', this.onMentionClick.bind(this, mention), false); | ||||
@@ -99,7 +99,7 @@ class StatusList extends ImmutablePureComponent { | |||||
} | } | ||||
render () { | render () { | ||||
const { statusIds, onScrollToBottom, scrollKey, trackScroll, shouldUpdateScroll, isLoading, hasMore, prepend, emptyMessage } = this.props; | |||||
const { statusIds, scrollKey, trackScroll, shouldUpdateScroll, isLoading, hasMore, prepend, emptyMessage } = this.props; | |||||
let loadMore = null; | let loadMore = null; | ||||
let scrollableArea = null; | let scrollableArea = null; | ||||
@@ -3,7 +3,6 @@ import { Provider } from 'react-redux'; | |||||
import PropTypes from 'prop-types'; | import PropTypes from 'prop-types'; | ||||
import configureStore from '../store/configureStore'; | import configureStore from '../store/configureStore'; | ||||
import { | import { | ||||
refreshTimelineSuccess, | |||||
updateTimeline, | updateTimeline, | ||||
deleteFromTimelines, | deleteFromTimelines, | ||||
refreshHomeTimeline, | refreshHomeTimeline, | ||||
@@ -19,8 +19,6 @@ import { | |||||
import { muteStatus, unmuteStatus, deleteStatus } from '../actions/statuses'; | import { muteStatus, unmuteStatus, deleteStatus } from '../actions/statuses'; | ||||
import { initReport } from '../actions/reports'; | import { initReport } from '../actions/reports'; | ||||
import { openModal } from '../actions/modal'; | import { openModal } from '../actions/modal'; | ||||
import { createSelector } from 'reselect'; | |||||
import { isMobile } from '../is_mobile'; | |||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | ||||
const messages = defineMessages({ | const messages = defineMessages({ | ||||
@@ -17,7 +17,7 @@ const messages = defineMessages({ | |||||
}); | }); | ||||
const makeMapStateToProps = () => { | const makeMapStateToProps = () => { | ||||
const mapStateToProps = (state, props) => ({ | |||||
const mapStateToProps = state => ({ | |||||
autoPlayGif: state.getIn(['meta', 'auto_play_gif']), | autoPlayGif: state.getIn(['meta', 'auto_play_gif']), | ||||
}); | }); | ||||
@@ -7,7 +7,6 @@ import { refreshAccountMediaTimeline, expandAccountMediaTimeline } from '../../a | |||||
import LoadingIndicator from '../../components/loading_indicator'; | import LoadingIndicator from '../../components/loading_indicator'; | ||||
import Column from '../ui/components/column'; | import Column from '../ui/components/column'; | ||||
import ColumnBackButton from '../../components/column_back_button'; | import ColumnBackButton from '../../components/column_back_button'; | ||||
import Immutable from 'immutable'; | |||||
import ImmutablePureComponent from 'react-immutable-pure-component'; | import ImmutablePureComponent from 'react-immutable-pure-component'; | ||||
import { getAccountGallery } from '../../selectors'; | import { getAccountGallery } from '../../selectors'; | ||||
import MediaItem from './components/media_item'; | import MediaItem from './components/media_item'; | ||||
@@ -2,8 +2,6 @@ import React from 'react'; | |||||
import PropTypes from 'prop-types'; | import PropTypes from 'prop-types'; | ||||
import ImmutablePropTypes from 'react-immutable-proptypes'; | import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | ||||
import ColumnCollapsable from '../../../components/column_collapsable'; | |||||
import SettingToggle from '../../notifications/components/setting_toggle'; | |||||
import SettingText from '../../../components/setting_text'; | import SettingText from '../../../components/setting_text'; | ||||
const messages = defineMessages({ | const messages = defineMessages({ | ||||
@@ -16,12 +14,11 @@ class ColumnSettings extends React.PureComponent { | |||||
static propTypes = { | static propTypes = { | ||||
settings: ImmutablePropTypes.map.isRequired, | settings: ImmutablePropTypes.map.isRequired, | ||||
onChange: PropTypes.func.isRequired, | onChange: PropTypes.func.isRequired, | ||||
onSave: PropTypes.func.isRequired, | |||||
intl: PropTypes.object.isRequired, | intl: PropTypes.object.isRequired, | ||||
}; | }; | ||||
render () { | render () { | ||||
const { settings, onChange, onSave, intl } = this.props; | |||||
const { settings, onChange, intl } = this.props; | |||||
return ( | return ( | ||||
<div> | <div> | ||||
@@ -1,6 +1,6 @@ | |||||
import { connect } from 'react-redux'; | import { connect } from 'react-redux'; | ||||
import ColumnSettings from '../components/column_settings'; | import ColumnSettings from '../components/column_settings'; | ||||
import { changeSetting, saveSettings } from '../../../actions/settings'; | |||||
import { changeSetting } from '../../../actions/settings'; | |||||
const mapStateToProps = state => ({ | const mapStateToProps = state => ({ | ||||
settings: state.getIn(['settings', 'community']), | settings: state.getIn(['settings', 'community']), | ||||
@@ -12,10 +12,6 @@ const mapDispatchToProps = dispatch => ({ | |||||
dispatch(changeSetting(['community', ...key], checked)); | dispatch(changeSetting(['community', ...key], checked)); | ||||
}, | }, | ||||
onSave () { | |||||
dispatch(saveSettings()); | |||||
}, | |||||
}); | }); | ||||
export default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings); | export default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings); |
@@ -14,7 +14,6 @@ import { | |||||
} from '../../actions/timelines'; | } from '../../actions/timelines'; | ||||
import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; | import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; | ||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | ||||
import ColumnBackButtonSlim from '../../components/column_back_button_slim'; | |||||
import ColumnSettingsContainer from './containers/column_settings_container'; | import ColumnSettingsContainer from './containers/column_settings_container'; | ||||
import createStream from '../../stream'; | import createStream from '../../stream'; | ||||
@@ -7,15 +7,13 @@ import ReplyIndicatorContainer from '../containers/reply_indicator_container'; | |||||
import AutosuggestTextarea from '../../../components/autosuggest_textarea'; | import AutosuggestTextarea from '../../../components/autosuggest_textarea'; | ||||
import { debounce } from 'lodash'; | import { debounce } from 'lodash'; | ||||
import UploadButtonContainer from '../containers/upload_button_container'; | import UploadButtonContainer from '../containers/upload_button_container'; | ||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | |||||
import Toggle from 'react-toggle'; | |||||
import { defineMessages, injectIntl } from 'react-intl'; | |||||
import Collapsable from '../../../components/collapsable'; | import Collapsable from '../../../components/collapsable'; | ||||
import SpoilerButtonContainer from '../containers/spoiler_button_container'; | import SpoilerButtonContainer from '../containers/spoiler_button_container'; | ||||
import PrivacyDropdownContainer from '../containers/privacy_dropdown_container'; | import PrivacyDropdownContainer from '../containers/privacy_dropdown_container'; | ||||
import SensitiveButtonContainer from '../containers/sensitive_button_container'; | import SensitiveButtonContainer from '../containers/sensitive_button_container'; | ||||
import EmojiPickerDropdown from './emoji_picker_dropdown'; | import EmojiPickerDropdown from './emoji_picker_dropdown'; | ||||
import UploadFormContainer from '../containers/upload_form_container'; | import UploadFormContainer from '../containers/upload_form_container'; | ||||
import TextIconButton from './text_icon_button'; | |||||
import WarningContainer from '../containers/warning_container'; | import WarningContainer from '../containers/warning_container'; | ||||
import ImmutablePureComponent from 'react-immutable-pure-component'; | import ImmutablePureComponent from 'react-immutable-pure-component'; | ||||
import { length } from 'stringz'; | import { length } from 'stringz'; | ||||
@@ -141,7 +139,6 @@ class ComposeForm extends ImmutablePureComponent { | |||||
const text = [this.props.spoiler_text, this.props.text].join(''); | const text = [this.props.spoiler_text, this.props.text].join(''); | ||||
let publishText = ''; | let publishText = ''; | ||||
let reply_to_other = false; | |||||
if (this.props.privacy === 'private' || this.props.privacy === 'direct') { | if (this.props.privacy === 'private' || this.props.privacy === 'direct') { | ||||
publishText = <span className='compose-form__publish-private'><i className='fa fa-lock' /> {intl.formatMessage(messages.publish)}</span>; | publishText = <span className='compose-form__publish-private'><i className='fa fa-lock' /> {intl.formatMessage(messages.publish)}</span>; | ||||
@@ -52,7 +52,7 @@ class EmojiPickerDropdown extends React.PureComponent { | |||||
import(/* webpackChunkName: "emojione_picker" */ 'emojione-picker').then(TheEmojiPicker => { | import(/* webpackChunkName: "emojione_picker" */ 'emojione-picker').then(TheEmojiPicker => { | ||||
EmojiPicker = TheEmojiPicker.default; | EmojiPicker = TheEmojiPicker.default; | ||||
this.setState({ loading: false }); | this.setState({ loading: false }); | ||||
}).catch(err => { | |||||
}).catch(() => { | |||||
// TODO: show the user an error? | // TODO: show the user an error? | ||||
this.setState({ loading: false }); | this.setState({ loading: false }); | ||||
}); | }); | ||||
@@ -1,11 +1,8 @@ | |||||
import React from 'react'; | import React from 'react'; | ||||
import ImmutablePropTypes from 'react-immutable-proptypes'; | import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
import Avatar from '../../../components/avatar'; | import Avatar from '../../../components/avatar'; | ||||
import IconButton from '../../../components/icon_button'; | |||||
import DisplayName from '../../../components/display_name'; | |||||
import Permalink from '../../../components/permalink'; | import Permalink from '../../../components/permalink'; | ||||
import { FormattedMessage } from 'react-intl'; | import { FormattedMessage } from 'react-intl'; | ||||
import Link from 'react-router-dom/Link'; | |||||
import ImmutablePureComponent from 'react-immutable-pure-component'; | import ImmutablePureComponent from 'react-immutable-pure-component'; | ||||
class NavigationBar extends ImmutablePureComponent { | class NavigationBar extends ImmutablePureComponent { | ||||
@@ -64,7 +64,7 @@ class PrivacyDropdown extends React.PureComponent { | |||||
} | } | ||||
render () { | render () { | ||||
const { value, onChange, intl } = this.props; | |||||
const { value, intl } = this.props; | |||||
const { open } = this.state; | const { open } = this.state; | ||||
const options = [ | const options = [ | ||||
@@ -1,6 +1,6 @@ | |||||
import React from 'react'; | import React from 'react'; | ||||
import PropTypes from 'prop-types'; | import PropTypes from 'prop-types'; | ||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | |||||
import { defineMessages, injectIntl } from 'react-intl'; | |||||
const messages = defineMessages({ | const messages = defineMessages({ | ||||
placeholder: { id: 'search.placeholder', defaultMessage: 'Search' }, | placeholder: { id: 'search.placeholder', defaultMessage: 'Search' }, | ||||
@@ -1,6 +1,6 @@ | |||||
import React from 'react'; | import React from 'react'; | ||||
import ImmutablePropTypes from 'react-immutable-proptypes'; | import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | |||||
import { FormattedMessage } from 'react-intl'; | |||||
import AccountContainer from '../../../containers/account_container'; | import AccountContainer from '../../../containers/account_container'; | ||||
import StatusContainer from '../../../containers/status_container'; | import StatusContainer from '../../../containers/status_container'; | ||||
import Link from 'react-router-dom/Link'; | import Link from 'react-router-dom/Link'; | ||||
@@ -11,7 +11,7 @@ const messages = defineMessages({ | |||||
}); | }); | ||||
const makeMapStateToProps = () => { | const makeMapStateToProps = () => { | ||||
const mapStateToProps = (state, props) => ({ | |||||
const mapStateToProps = state => ({ | |||||
acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']), | acceptContentTypes: state.getIn(['media_attachments', 'accept_content_types']), | ||||
}); | }); | ||||
@@ -1,7 +1,7 @@ | |||||
import { connect } from 'react-redux'; | import { connect } from 'react-redux'; | ||||
import NavigationBar from '../components/navigation_bar'; | import NavigationBar from '../components/navigation_bar'; | ||||
const mapStateToProps = (state, props) => { | |||||
const mapStateToProps = state => { | |||||
return { | return { | ||||
account: state.getIn(['accounts', state.getIn(['meta', 'me'])]), | account: state.getIn(['accounts', state.getIn(['meta', 'me'])]), | ||||
}; | }; | ||||
@@ -6,7 +6,7 @@ import ReplyIndicator from '../components/reply_indicator'; | |||||
const makeMapStateToProps = () => { | const makeMapStateToProps = () => { | ||||
const getStatus = makeGetStatus(); | const getStatus = makeGetStatus(); | ||||
const mapStateToProps = (state, props) => ({ | |||||
const mapStateToProps = state => ({ | |||||
status: getStatus(state, state.getIn(['compose', 'in_reply_to'])), | status: getStatus(state, state.getIn(['compose', 'in_reply_to'])), | ||||
}); | }); | ||||
@@ -2,7 +2,7 @@ import { connect } from 'react-redux'; | |||||
import UploadForm from '../components/upload_form'; | import UploadForm from '../components/upload_form'; | ||||
import { undoUploadCompose } from '../../../actions/compose'; | import { undoUploadCompose } from '../../../actions/compose'; | ||||
const mapStateToProps = (state, props) => ({ | |||||
const mapStateToProps = state => ({ | |||||
media: state.getIn(['compose', 'media_attachments']), | media: state.getIn(['compose', 'media_attachments']), | ||||
}); | }); | ||||
@@ -1,7 +1,7 @@ | |||||
import { connect } from 'react-redux'; | import { connect } from 'react-redux'; | ||||
import UploadProgress from '../components/upload_progress'; | import UploadProgress from '../components/upload_progress'; | ||||
const mapStateToProps = (state, props) => ({ | |||||
const mapStateToProps = state => ({ | |||||
active: state.getIn(['compose', 'is_uploading']), | active: state.getIn(['compose', 'is_uploading']), | ||||
progress: state.getIn(['compose', 'progress']), | progress: state.getIn(['compose', 'progress']), | ||||
}); | }); | ||||
@@ -1,6 +1,5 @@ | |||||
import React from 'react'; | import React from 'react'; | ||||
import ComposeFormContainer from './containers/compose_form_container'; | import ComposeFormContainer from './containers/compose_form_container'; | ||||
import UploadFormContainer from './containers/upload_form_container'; | |||||
import NavigationContainer from './containers/navigation_container'; | import NavigationContainer from './containers/navigation_container'; | ||||
import PropTypes from 'prop-types'; | import PropTypes from 'prop-types'; | ||||
import { connect } from 'react-redux'; | import { connect } from 'react-redux'; | ||||
@@ -1,7 +1,6 @@ | |||||
import React from 'react'; | import React from 'react'; | ||||
import { connect } from 'react-redux'; | import { connect } from 'react-redux'; | ||||
import PropTypes from 'prop-types'; | import PropTypes from 'prop-types'; | ||||
import ImmutablePropTypes from 'react-immutable-proptypes'; | |||||
import LoadingIndicator from '../../components/loading_indicator'; | import LoadingIndicator from '../../components/loading_indicator'; | ||||
import { fetchFavouritedStatuses, expandFavouritedStatuses } from '../../actions/favourites'; | import { fetchFavouritedStatuses, expandFavouritedStatuses } from '../../actions/favourites'; | ||||
import Column from '../ui/components/column'; | import Column from '../ui/components/column'; | ||||
@@ -15,19 +14,15 @@ const messages = defineMessages({ | |||||
}); | }); | ||||
const mapStateToProps = state => ({ | const mapStateToProps = state => ({ | ||||
statusIds: state.getIn(['status_lists', 'favourites', 'items']), | |||||
loaded: state.getIn(['status_lists', 'favourites', 'loaded']), | loaded: state.getIn(['status_lists', 'favourites', 'loaded']), | ||||
me: state.getIn(['meta', 'me']), | |||||
}); | }); | ||||
class Favourites extends ImmutablePureComponent { | class Favourites extends ImmutablePureComponent { | ||||
static propTypes = { | static propTypes = { | ||||
dispatch: PropTypes.func.isRequired, | dispatch: PropTypes.func.isRequired, | ||||
statusIds: ImmutablePropTypes.list.isRequired, | |||||
loaded: PropTypes.bool, | loaded: PropTypes.bool, | ||||
intl: PropTypes.object.isRequired, | intl: PropTypes.object.isRequired, | ||||
me: PropTypes.number.isRequired, | |||||
}; | }; | ||||
componentWillMount () { | componentWillMount () { | ||||
@@ -39,7 +34,7 @@ class Favourites extends ImmutablePureComponent { | |||||
} | } | ||||
render () { | render () { | ||||
const { statusIds, loaded, intl, me } = this.props; | |||||
const { loaded, intl } = this.props; | |||||
if (!loaded) { | if (!loaded) { | ||||
return ( | return ( | ||||
@@ -14,11 +14,11 @@ const makeMapStateToProps = () => { | |||||
}; | }; | ||||
const mapDispatchToProps = (dispatch, { id }) => ({ | const mapDispatchToProps = (dispatch, { id }) => ({ | ||||
onAuthorize (account) { | |||||
onAuthorize () { | |||||
dispatch(authorizeFollowRequest(id)); | dispatch(authorizeFollowRequest(id)); | ||||
}, | }, | ||||
onReject (account) { | |||||
onReject () { | |||||
dispatch(rejectFollowRequest(id)); | dispatch(rejectFollowRequest(id)); | ||||
}, | }, | ||||
}); | }); | ||||
@@ -2,7 +2,6 @@ import React from 'react'; | |||||
import Column from '../ui/components/column'; | import Column from '../ui/components/column'; | ||||
import ColumnLink from '../ui/components/column_link'; | import ColumnLink from '../ui/components/column_link'; | ||||
import ColumnSubheading from '../ui/components/column_subheading'; | import ColumnSubheading from '../ui/components/column_subheading'; | ||||
import Link from 'react-router-dom/Link'; | |||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | ||||
import { connect } from 'react-redux'; | import { connect } from 'react-redux'; | ||||
import PropTypes from 'prop-types'; | import PropTypes from 'prop-types'; | ||||
@@ -11,7 +11,6 @@ import { | |||||
deleteFromTimelines, | deleteFromTimelines, | ||||
} from '../../actions/timelines'; | } from '../../actions/timelines'; | ||||
import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; | import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; | ||||
import ColumnBackButtonSlim from '../../components/column_back_button_slim'; | |||||
import { FormattedMessage } from 'react-intl'; | import { FormattedMessage } from 'react-intl'; | ||||
import createStream from '../../stream'; | import createStream from '../../stream'; | ||||
@@ -2,7 +2,6 @@ import React from 'react'; | |||||
import PropTypes from 'prop-types'; | import PropTypes from 'prop-types'; | ||||
import ImmutablePropTypes from 'react-immutable-proptypes'; | import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | ||||
import ColumnCollapsable from '../../../components/column_collapsable'; | |||||
import SettingToggle from '../../notifications/components/setting_toggle'; | import SettingToggle from '../../notifications/components/setting_toggle'; | ||||
import SettingText from '../../../components/setting_text'; | import SettingText from '../../../components/setting_text'; | ||||
@@ -16,12 +15,11 @@ class ColumnSettings extends React.PureComponent { | |||||
static propTypes = { | static propTypes = { | ||||
settings: ImmutablePropTypes.map.isRequired, | settings: ImmutablePropTypes.map.isRequired, | ||||
onChange: PropTypes.func.isRequired, | onChange: PropTypes.func.isRequired, | ||||
onSave: PropTypes.func.isRequired, | |||||
intl: PropTypes.object.isRequired, | intl: PropTypes.object.isRequired, | ||||
}; | }; | ||||
render () { | render () { | ||||
const { settings, onChange, onSave, intl } = this.props; | |||||
const { settings, onChange, intl } = this.props; | |||||
return ( | return ( | ||||
<div> | <div> | ||||
@@ -2,7 +2,6 @@ import React from 'react'; | |||||
import PropTypes from 'prop-types'; | import PropTypes from 'prop-types'; | ||||
import ImmutablePropTypes from 'react-immutable-proptypes'; | import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
import { FormattedMessage } from 'react-intl'; | import { FormattedMessage } from 'react-intl'; | ||||
import ColumnCollapsable from '../../../components/column_collapsable'; | |||||
import ClearColumnButton from './clear_column_button'; | import ClearColumnButton from './clear_column_button'; | ||||
import SettingToggle from './setting_toggle'; | import SettingToggle from './setting_toggle'; | ||||
@@ -16,7 +15,7 @@ class ColumnSettings extends React.PureComponent { | |||||
}; | }; | ||||
render () { | render () { | ||||
const { settings, onChange, onSave, onClear } = this.props; | |||||
const { settings, onChange, onClear } = this.props; | |||||
const alertStr = <FormattedMessage id='notifications.column_settings.alert' defaultMessage='Desktop notifications' />; | const alertStr = <FormattedMessage id='notifications.column_settings.alert' defaultMessage='Desktop notifications' />; | ||||
const showStr = <FormattedMessage id='notifications.column_settings.show' defaultMessage='Show in column' />; | const showStr = <FormattedMessage id='notifications.column_settings.show' defaultMessage='Show in column' />; | ||||
@@ -2,7 +2,6 @@ import React from 'react'; | |||||
import ImmutablePropTypes from 'react-immutable-proptypes'; | import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
import StatusContainer from '../../../containers/status_container'; | import StatusContainer from '../../../containers/status_container'; | ||||
import AccountContainer from '../../../containers/account_container'; | import AccountContainer from '../../../containers/account_container'; | ||||
import Avatar from '../../../components/avatar'; | |||||
import { FormattedMessage } from 'react-intl'; | import { FormattedMessage } from 'react-intl'; | ||||
import Permalink from '../../../components/permalink'; | import Permalink from '../../../components/permalink'; | ||||
import emojify from '../../../emoji'; | import emojify from '../../../emoji'; | ||||
@@ -18,7 +18,7 @@ class SettingToggle extends React.PureComponent { | |||||
} | } | ||||
render () { | render () { | ||||
const { prefix, settings, settingKey, label, onChange } = this.props; | |||||
const { prefix, settings, settingKey, label } = this.props; | |||||
const id = ['setting-toggle', prefix, ...settingKey].filter(Boolean).join('-'); | const id = ['setting-toggle', prefix, ...settingKey].filter(Boolean).join('-'); | ||||
return ( | return ( | ||||
@@ -1,6 +1,6 @@ | |||||
import { connect } from 'react-redux'; | import { connect } from 'react-redux'; | ||||
import ColumnSettings from '../../community_timeline/components/column_settings'; | import ColumnSettings from '../../community_timeline/components/column_settings'; | ||||
import { changeSetting, saveSettings } from '../../../actions/settings'; | |||||
import { changeSetting } from '../../../actions/settings'; | |||||
const mapStateToProps = state => ({ | const mapStateToProps = state => ({ | ||||
settings: state.getIn(['settings', 'public']), | settings: state.getIn(['settings', 'public']), | ||||
@@ -12,10 +12,6 @@ const mapDispatchToProps = dispatch => ({ | |||||
dispatch(changeSetting(['public', ...key], checked)); | dispatch(changeSetting(['public', ...key], checked)); | ||||
}, | }, | ||||
onSave () { | |||||
dispatch(saveSettings()); | |||||
}, | |||||
}); | }); | ||||
export default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings); | export default connect(mapStateToProps, mapDispatchToProps)(ColumnSettings); |
@@ -14,7 +14,6 @@ import { | |||||
} from '../../actions/timelines'; | } from '../../actions/timelines'; | ||||
import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; | import { addColumn, removeColumn, moveColumn } from '../../actions/columns'; | ||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | ||||
import ColumnBackButtonSlim from '../../components/column_back_button_slim'; | |||||
import ColumnSettingsContainer from './containers/column_settings_container'; | import ColumnSettingsContainer from './containers/column_settings_container'; | ||||
import createStream from '../../stream'; | import createStream from '../../stream'; | ||||
@@ -1,6 +1,6 @@ | |||||
import React from 'react'; | import React from 'react'; | ||||
import { connect } from 'react-redux'; | import { connect } from 'react-redux'; | ||||
import { cancelReport, changeReportComment, submitReport } from '../../actions/reports'; | |||||
import { changeReportComment, submitReport } from '../../actions/reports'; | |||||
import { refreshAccountTimeline } from '../../actions/timelines'; | import { refreshAccountTimeline } from '../../actions/timelines'; | ||||
import PropTypes from 'prop-types'; | import PropTypes from 'prop-types'; | ||||
import ImmutablePropTypes from 'react-immutable-proptypes'; | import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
@@ -3,8 +3,6 @@ import { connect } from 'react-redux'; | |||||
import PropTypes from 'prop-types'; | import PropTypes from 'prop-types'; | ||||
import ImmutablePropTypes from 'react-immutable-proptypes'; | import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
import { fetchStatus } from '../../actions/statuses'; | import { fetchStatus } from '../../actions/statuses'; | ||||
import Immutable from 'immutable'; | |||||
import EmbeddedStatus from '../../components/status'; | |||||
import MissingIndicator from '../../components/missing_indicator'; | import MissingIndicator from '../../components/missing_indicator'; | ||||
import DetailedStatus from './components/detailed_status'; | import DetailedStatus from './components/detailed_status'; | ||||
import ActionBar from './components/action_bar'; | import ActionBar from './components/action_bar'; | ||||
@@ -21,17 +19,12 @@ import { | |||||
} from '../../actions/compose'; | } from '../../actions/compose'; | ||||
import { deleteStatus } from '../../actions/statuses'; | import { deleteStatus } from '../../actions/statuses'; | ||||
import { initReport } from '../../actions/reports'; | import { initReport } from '../../actions/reports'; | ||||
import { | |||||
makeGetStatus, | |||||
getStatusAncestors, | |||||
getStatusDescendants, | |||||
} from '../../selectors'; | |||||
import { makeGetStatus } from '../../selectors'; | |||||
import { ScrollContainer } from 'react-router-scroll'; | import { ScrollContainer } from 'react-router-scroll'; | ||||
import ColumnBackButton from '../../components/column_back_button'; | import ColumnBackButton from '../../components/column_back_button'; | ||||
import StatusContainer from '../../containers/status_container'; | import StatusContainer from '../../containers/status_container'; | ||||
import { openModal } from '../../actions/modal'; | import { openModal } from '../../actions/modal'; | ||||
import { isMobile } from '../../is_mobile'; | |||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | |||||
import { defineMessages, injectIntl } from 'react-intl'; | |||||
import ImmutablePureComponent from 'react-immutable-pure-component'; | import ImmutablePureComponent from 'react-immutable-pure-component'; | ||||
const messages = defineMessages({ | const messages = defineMessages({ | ||||
@@ -159,8 +152,6 @@ class Status extends ImmutablePureComponent { | |||||
); | ); | ||||
} | } | ||||
const account = status.get('account'); | |||||
if (ancestorsIds && ancestorsIds.size > 0) { | if (ancestorsIds && ancestorsIds.size > 0) { | ||||
ancestors = <div>{this.renderChildren(ancestorsIds)}</div>; | ancestors = <div>{this.renderChildren(ancestorsIds)}</div>; | ||||
} | } | ||||
@@ -2,7 +2,6 @@ import React from 'react'; | |||||
import ImmutablePropTypes from 'react-immutable-proptypes'; | import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
import PropTypes from 'prop-types'; | import PropTypes from 'prop-types'; | ||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | ||||
import IconButton from '../../../components/icon_button'; | |||||
import Button from '../../../components/button'; | import Button from '../../../components/button'; | ||||
import StatusContent from '../../../components/status_content'; | import StatusContent from '../../../components/status_content'; | ||||
import Avatar from '../../../components/avatar'; | import Avatar from '../../../components/avatar'; | ||||
@@ -49,7 +48,7 @@ class BoostModal extends ImmutablePureComponent { | |||||
} | } | ||||
render () { | render () { | ||||
const { status, intl, onClose } = this.props; | |||||
const { status, intl } = this.props; | |||||
return ( | return ( | ||||
<div className='modal-root__modal boost-modal'> | <div className='modal-root__modal boost-modal'> | ||||
@@ -1,6 +1,6 @@ | |||||
import React from 'react'; | import React from 'react'; | ||||
import PropTypes from 'prop-types'; | import PropTypes from 'prop-types'; | ||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl'; | |||||
import { injectIntl, FormattedMessage } from 'react-intl'; | |||||
import Button from '../../../components/button'; | import Button from '../../../components/button'; | ||||
class ConfirmationModal extends React.PureComponent { | class ConfirmationModal extends React.PureComponent { | ||||
@@ -41,7 +41,7 @@ class ImageLoader extends React.PureComponent { | |||||
render() { | render() { | ||||
const { alt, src, previewSrc, width, height } = this.props; | const { alt, src, previewSrc, width, height } = this.props; | ||||
const { loading, error } = this.state; | |||||
const { loading } = this.state; | |||||
return ( | return ( | ||||
<div className='image-loader'> | <div className='image-loader'> | ||||
@@ -1,5 +1,4 @@ | |||||
import React from 'react'; | import React from 'react'; | ||||
import LoadingIndicator from '../../../components/loading_indicator'; | |||||
import ImmutablePropTypes from 'react-immutable-proptypes'; | import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
import PropTypes from 'prop-types'; | import PropTypes from 'prop-types'; | ||||
import ExtendedVideoPlayer from '../../../components/extended_video_player'; | import ExtendedVideoPlayer from '../../../components/extended_video_player'; | ||||
@@ -72,7 +72,7 @@ PageTwo.propTypes = { | |||||
me: ImmutablePropTypes.map.isRequired, | me: ImmutablePropTypes.map.isRequired, | ||||
}; | }; | ||||
const PageThree = ({ me, domain }) => ( | |||||
const PageThree = ({ me }) => ( | |||||
<div className='onboarding-modal__page onboarding-modal__page-three'> | <div className='onboarding-modal__page onboarding-modal__page-three'> | ||||
<div className='figure non-interactive'> | <div className='figure non-interactive'> | ||||
<Search | <Search | ||||
@@ -95,7 +95,6 @@ const PageThree = ({ me, domain }) => ( | |||||
PageThree.propTypes = { | PageThree.propTypes = { | ||||
me: ImmutablePropTypes.map.isRequired, | me: ImmutablePropTypes.map.isRequired, | ||||
domain: PropTypes.string.isRequired, | |||||
}; | }; | ||||
const PageFour = ({ domain, intl }) => ( | const PageFour = ({ domain, intl }) => ( | ||||
@@ -187,7 +186,7 @@ class OnboardingModal extends React.PureComponent { | |||||
this.pages = [ | this.pages = [ | ||||
<PageOne acct={me.get('acct')} domain={domain} />, | <PageOne acct={me.get('acct')} domain={domain} />, | ||||
<PageTwo me={me} />, | <PageTwo me={me} />, | ||||
<PageThree me={me} domain={domain} />, | |||||
<PageThree me={me} />, | |||||
<PageFour domain={domain} intl={intl} />, | <PageFour domain={domain} intl={intl} />, | ||||
<PageSix admin={admin} domain={domain} />, | <PageSix admin={admin} domain={domain} />, | ||||
]; | ]; | ||||
@@ -1,5 +1,4 @@ | |||||
import React from 'react'; | import React from 'react'; | ||||
import LoadingIndicator from '../../../components/loading_indicator'; | |||||
import ImmutablePropTypes from 'react-immutable-proptypes'; | import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
import PropTypes from 'prop-types'; | import PropTypes from 'prop-types'; | ||||
import ExtendedVideoPlayer from '../../../components/extended_video_player'; | import ExtendedVideoPlayer from '../../../components/extended_video_player'; | ||||
@@ -1,12 +1,9 @@ | |||||
import { connect } from 'react-redux'; | import { connect } from 'react-redux'; | ||||
import { NotificationStack } from 'react-notification'; | import { NotificationStack } from 'react-notification'; | ||||
import { | |||||
dismissAlert, | |||||
clearAlerts, | |||||
} from '../../../actions/alerts'; | |||||
import { dismissAlert } from '../../../actions/alerts'; | |||||
import { getAlerts } from '../../../selectors'; | import { getAlerts } from '../../../selectors'; | ||||
const mapStateToProps = (state, props) => ({ | |||||
const mapStateToProps = state => ({ | |||||
notifications: getAlerts(state), | notifications: getAlerts(state), | ||||
}); | }); | ||||
@@ -74,9 +74,6 @@ class WrappedRoute extends React.Component { | |||||
} | } | ||||
const noOp = () => false; | |||||
class UI extends React.PureComponent { | class UI extends React.PureComponent { | ||||
static propTypes = { | static propTypes = { | ||||
@@ -1,13 +1,11 @@ | |||||
import { showAlert } from '../actions/alerts'; | import { showAlert } from '../actions/alerts'; | ||||
const defaultSuccessSuffix = 'SUCCESS'; | |||||
const defaultFailSuffix = 'FAIL'; | const defaultFailSuffix = 'FAIL'; | ||||
export default function errorsMiddleware() { | export default function errorsMiddleware() { | ||||
return ({ dispatch }) => next => action => { | return ({ dispatch }) => next => action => { | ||||
if (action.type && !action.skipAlert) { | if (action.type && !action.skipAlert) { | ||||
const isFail = new RegExp(`${defaultFailSuffix}$`, 'g'); | const isFail = new RegExp(`${defaultFailSuffix}$`, 'g'); | ||||
const isSuccess = new RegExp(`${defaultSuccessSuffix}$`, 'g'); | |||||
if (action.type.match(isFail)) { | if (action.type.match(isFail)) { | ||||
if (action.error.response) { | if (action.error.response) { | ||||
@@ -32,7 +32,7 @@ export default function soundsMiddleware() { | |||||
]), | ]), | ||||
}; | }; | ||||
return ({ dispatch }) => next => (action) => { | |||||
return () => next => action => { | |||||
if (action.meta && action.meta.sound && soundCache[action.meta.sound]) { | if (action.meta && action.meta.sound && soundCache[action.meta.sound]) { | ||||
play(soundCache[action.meta.sound]); | play(soundCache[action.meta.sound]); | ||||
} | } | ||||
@@ -20,7 +20,6 @@ import { | |||||
COMPOSE_SPOILERNESS_CHANGE, | COMPOSE_SPOILERNESS_CHANGE, | ||||
COMPOSE_SPOILER_TEXT_CHANGE, | COMPOSE_SPOILER_TEXT_CHANGE, | ||||
COMPOSE_VISIBILITY_CHANGE, | COMPOSE_VISIBILITY_CHANGE, | ||||
COMPOSE_LISTABILITY_CHANGE, | |||||
COMPOSE_EMOJI_INSERT, | COMPOSE_EMOJI_INSERT, | ||||
} from '../actions/compose'; | } from '../actions/compose'; | ||||
import { TIMELINE_DELETE } from '../actions/timelines'; | import { TIMELINE_DELETE } from '../actions/timelines'; | ||||
@@ -1,5 +1,4 @@ | |||||
import { MODAL_OPEN, MODAL_CLOSE } from '../actions/modal'; | import { MODAL_OPEN, MODAL_CLOSE } from '../actions/modal'; | ||||
import Immutable from 'immutable'; | |||||
const initialState = { | const initialState = { | ||||
modalType: null, | modalType: null, | ||||
@@ -14,60 +14,6 @@ const initialState = Immutable.Map({ | |||||
results: Immutable.Map(), | results: Immutable.Map(), | ||||
}); | }); | ||||
const normalizeSuggestions = (state, value, accounts, hashtags, statuses) => { | |||||
let newSuggestions = []; | |||||
if (accounts.length > 0) { | |||||
newSuggestions.push({ | |||||
title: 'account', | |||||
items: accounts.map(item => ({ | |||||
type: 'account', | |||||
id: item.id, | |||||
value: item.acct, | |||||
})), | |||||
}); | |||||
} | |||||
if (value.indexOf('@') === -1 && value.indexOf(' ') === -1 || hashtags.length > 0) { | |||||
let hashtagItems = hashtags.map(item => ({ | |||||
type: 'hashtag', | |||||
id: item, | |||||
value: `#${item}`, | |||||
})); | |||||
if (value.indexOf('@') === -1 && value.indexOf(' ') === -1 && !value.startsWith('http://') && !value.startsWith('https://') && hashtags.indexOf(value) === -1) { | |||||
hashtagItems.unshift({ | |||||
type: 'hashtag', | |||||
id: value, | |||||
value: `#${value}`, | |||||
}); | |||||
} | |||||
if (hashtagItems.length > 0) { | |||||
newSuggestions.push({ | |||||
title: 'hashtag', | |||||
items: hashtagItems, | |||||
}); | |||||
} | |||||
} | |||||
if (statuses.length > 0) { | |||||
newSuggestions.push({ | |||||
title: 'status', | |||||
items: statuses.map(item => ({ | |||||
type: 'status', | |||||
id: item.id, | |||||
value: item.id, | |||||
})), | |||||
}); | |||||
} | |||||
return state.withMutations(map => { | |||||
map.set('suggestions', newSuggestions); | |||||
map.set('loaded_value', value); | |||||
}); | |||||
}; | |||||
export default function search(state = initialState, action) { | export default function search(state = initialState, action) { | ||||
switch(action.type) { | switch(action.type) { | ||||
case SEARCH_CHANGE: | case SEARCH_CHANGE: | ||||
@@ -12,12 +12,6 @@ import { | |||||
TIMELINE_DISCONNECT, | TIMELINE_DISCONNECT, | ||||
} from '../actions/timelines'; | } from '../actions/timelines'; | ||||
import { | import { | ||||
REBLOG_SUCCESS, | |||||
UNREBLOG_SUCCESS, | |||||
FAVOURITE_SUCCESS, | |||||
UNFAVOURITE_SUCCESS, | |||||
} from '../actions/interactions'; | |||||
import { | |||||
ACCOUNT_BLOCK_SUCCESS, | ACCOUNT_BLOCK_SUCCESS, | ||||
ACCOUNT_MUTE_SUCCESS, | ACCOUNT_MUTE_SUCCESS, | ||||
} from '../actions/accounts'; | } from '../actions/accounts'; | ||||
@@ -1,9 +1,6 @@ | |||||
import { createSelector } from 'reselect'; | import { createSelector } from 'reselect'; | ||||
import Immutable from 'immutable'; | import Immutable from 'immutable'; | ||||
const getStatuses = state => state.get('statuses'); | |||||
const getAccounts = state => state.get('accounts'); | |||||
const getAccountBase = (state, id) => state.getIn(['accounts', id], null); | const getAccountBase = (state, id) => state.getIn(['accounts', id], null); | ||||
const getAccountCounters = (state, id) => state.getIn(['accounts_counters', id], null); | const getAccountCounters = (state, id) => state.getIn(['accounts_counters', id], null); | ||||
const getAccountRelationship = (state, id) => state.getIn(['relationships', id], null); | const getAccountRelationship = (state, id) => state.getIn(['relationships', id], null); | ||||
@@ -4,7 +4,6 @@ import appReducer from '../reducers'; | |||||
import loadingBarMiddleware from '../middleware/loading_bar'; | import loadingBarMiddleware from '../middleware/loading_bar'; | ||||
import errorsMiddleware from '../middleware/errors'; | import errorsMiddleware from '../middleware/errors'; | ||||
import soundsMiddleware from '../middleware/sounds'; | import soundsMiddleware from '../middleware/sounds'; | ||||
import Immutable from 'immutable'; | |||||
export default function configureStore() { | export default function configureStore() { | ||||
return createStore(appReducer, compose(applyMiddleware( | return createStore(appReducer, compose(applyMiddleware( | ||||
@@ -0,0 +1,3 @@ | |||||
--- | |||||
env: | |||||
mocha: true |
@@ -1,8 +0,0 @@ | |||||
import { expect } from 'chai'; | |||||
import { shallow } from 'enzyme'; | |||||
import React from 'react'; | |||||
import LoadingIndicator from '../../../app/javascript/mastodon/components/loading_indicator'; | |||||
describe('<LoadingIndicator />', () => { | |||||
}); |
@@ -1,5 +1,4 @@ | |||||
import { configure } from '@storybook/react'; | import { configure } from '@storybook/react'; | ||||
import React from 'react'; | |||||
import { addLocaleData } from 'react-intl'; | import { addLocaleData } from 'react-intl'; | ||||
import en from 'react-intl/locale-data/en'; | import en from 'react-intl/locale-data/en'; | ||||
import '../app/javascript/styles/application.scss'; | import '../app/javascript/styles/application.scss'; | ||||
@@ -1,6 +1,5 @@ | |||||
import React from 'react'; | import React from 'react'; | ||||
import { storiesOf } from '@storybook/react'; | import { storiesOf } from '@storybook/react'; | ||||
import { action } from '@storybook/addon-actions'; | |||||
import CharacterCounter from 'mastodon/features/compose/components/character_counter'; | import CharacterCounter from 'mastodon/features/compose/components/character_counter'; | ||||
storiesOf('CharacterCounter', module) | storiesOf('CharacterCounter', module) | ||||
@@ -1,7 +1,6 @@ | |||||
import React from 'react'; | import React from 'react'; | ||||
import { IntlProvider } from 'react-intl'; | import { IntlProvider } from 'react-intl'; | ||||
import { storiesOf } from '@storybook/react'; | import { storiesOf } from '@storybook/react'; | ||||
import { action } from '@storybook/addon-actions'; | |||||
import en from 'mastodon/locales/en.json'; | import en from 'mastodon/locales/en.json'; | ||||
import LoadingIndicator from 'mastodon/components/loading_indicator'; | import LoadingIndicator from 'mastodon/components/loading_indicator'; | ||||
@@ -242,7 +242,7 @@ const startWorker = (workerId) => { | |||||
accountFromRequest(req, next); | accountFromRequest(req, next); | ||||
}; | }; | ||||
const errorMiddleware = (err, req, res, next) => { | |||||
const errorMiddleware = (err, req, res) => { | |||||
log.error(req.requestId, err.toString()); | log.error(req.requestId, err.toString()); | ||||
res.writeHead(err.statusCode || 500, { 'Content-Type': 'application/json' }); | res.writeHead(err.statusCode || 500, { 'Content-Type': 'application/json' }); | ||||
res.end(JSON.stringify({ error: err.statusCode ? err.toString() : 'An unexpected error occurred' })); | res.end(JSON.stringify({ error: err.statusCode ? err.toString() : 'An unexpected error occurred' })); | ||||
@@ -366,7 +366,7 @@ const startWorker = (workerId) => { | |||||
} | } | ||||
}); | }); | ||||
ws.on('error', e => { | |||||
ws.on('error', () => { | |||||
log.verbose(req.requestId, `Ending stream for ${req.accountId}`); | log.verbose(req.requestId, `Ending stream for ${req.accountId}`); | ||||
unsubscribe(id, listener); | unsubscribe(id, listener); | ||||
if (closeHandler) { | if (closeHandler) { | ||||
@@ -443,7 +443,7 @@ const startWorker = (workerId) => { | |||||
} | } | ||||
}); | }); | ||||
const wsInterval = setInterval(() => { | |||||
setInterval(() => { | |||||
wss.clients.forEach(ws => { | wss.clients.forEach(ws => { | ||||
if (ws.isAlive === false) { | if (ws.isAlive === false) { | ||||
ws.terminate(); | ws.terminate(); | ||||