Remove unused variables (#3906)
This commit is contained in:
parent
6fbb3841a6
commit
eff9416469
|
@ -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 { defineMessages, injectIntl } from 'react-intl';
|
||||||
import Toggle from 'react-toggle';
|
|
||||||
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 {
|
import { makeGetStatus } from '../../selectors';
|
||||||
makeGetStatus,
|
|
||||||
getStatusAncestors,
|
|
||||||
getStatusDescendants,
|
|
||||||
} 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 } from 'react-intl';
|
||||||
import { defineMessages, injectIntl, FormattedMessage } 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 {
|
import { dismissAlert } from '../../../actions/alerts';
|
||||||
dismissAlert,
|
|
||||||
clearAlerts,
|
|
||||||
} 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:
|
||||||
|
|
|
@ -11,12 +11,6 @@ import {
|
||||||
TIMELINE_CONNECT,
|
TIMELINE_CONNECT,
|
||||||
TIMELINE_DISCONNECT,
|
TIMELINE_DISCONNECT,
|
||||||
} from '../actions/timelines';
|
} from '../actions/timelines';
|
||||||
import {
|
|
||||||
REBLOG_SUCCESS,
|
|
||||||
UNREBLOG_SUCCESS,
|
|
||||||
FAVOURITE_SUCCESS,
|
|
||||||
UNFAVOURITE_SUCCESS,
|
|
||||||
} from '../actions/interactions';
|
|
||||||
import {
|
import {
|
||||||
ACCOUNT_BLOCK_SUCCESS,
|
ACCOUNT_BLOCK_SUCCESS,
|
||||||
ACCOUNT_MUTE_SUCCESS,
|
ACCOUNT_MUTE_SUCCESS,
|
||||||
|
|
|
@ -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(
|
||||||
|
|
3
spec/javascript/.eslintrc.yml
Normal file
3
spec/javascript/.eslintrc.yml
Normal file
|
@ -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();
|
||||||
|
|
Reference in a new issue