5129f6f2aa
* Add messages informing that collections are empty Adds empty messages to blocked users, domain blocks, favourited statuses, users that favourited toot, follow requests, followers of given user, user's being followed by given user, lists, muted users, toots' boosts. Switched from using ScrollContainer to ScrollableList and/or added empty message's text. Fixes #4115 * Update localization files with strings for #4115 * Fix whitespace issues pointed out by codeclimate
75 lines
2.3 KiB
JavaScript
75 lines
2.3 KiB
JavaScript
import React from 'react';
|
|
import { connect } from 'react-redux';
|
|
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
|
import ImmutablePureComponent from 'react-immutable-pure-component';
|
|
import PropTypes from 'prop-types';
|
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
|
import { debounce } from 'lodash';
|
|
import LoadingIndicator from '../../components/loading_indicator';
|
|
import Column from '../ui/components/column';
|
|
import ColumnBackButtonSlim from '../../components/column_back_button_slim';
|
|
import DomainContainer from '../../containers/domain_container';
|
|
import { fetchDomainBlocks, expandDomainBlocks } from '../../actions/domain_blocks';
|
|
import ScrollableList from '../../components/scrollable_list';
|
|
|
|
const messages = defineMessages({
|
|
heading: { id: 'column.domain_blocks', defaultMessage: 'Hidden domains' },
|
|
unblockDomain: { id: 'account.unblock_domain', defaultMessage: 'Unhide {domain}' },
|
|
});
|
|
|
|
const mapStateToProps = state => ({
|
|
domains: state.getIn(['domain_lists', 'blocks', 'items']),
|
|
});
|
|
|
|
@connect(mapStateToProps)
|
|
@injectIntl
|
|
export default class Blocks extends ImmutablePureComponent {
|
|
|
|
static propTypes = {
|
|
params: PropTypes.object.isRequired,
|
|
dispatch: PropTypes.func.isRequired,
|
|
shouldUpdateScroll: PropTypes.func,
|
|
domains: ImmutablePropTypes.orderedSet,
|
|
intl: PropTypes.object.isRequired,
|
|
};
|
|
|
|
componentWillMount () {
|
|
this.props.dispatch(fetchDomainBlocks());
|
|
}
|
|
|
|
handleLoadMore = debounce(() => {
|
|
this.props.dispatch(expandDomainBlocks());
|
|
}, 300, { leading: true });
|
|
|
|
render () {
|
|
const { intl, domains, shouldUpdateScroll } = this.props;
|
|
|
|
if (!domains) {
|
|
return (
|
|
<Column>
|
|
<LoadingIndicator />
|
|
</Column>
|
|
);
|
|
}
|
|
|
|
const emptyMessage = <FormattedMessage id='empty_column.domain_blocks' defaultMessage='There are no hidden domains yet.' />;
|
|
|
|
return (
|
|
<Column icon='minus-circle' heading={intl.formatMessage(messages.heading)}>
|
|
<ColumnBackButtonSlim />
|
|
<ScrollableList
|
|
scrollKey='domain_blocks'
|
|
onLoadMore={this.handleLoadMore}
|
|
shouldUpdateScroll={shouldUpdateScroll}
|
|
emptyMessage={emptyMessage}
|
|
>
|
|
{domains.map(domain =>
|
|
<DomainContainer key={domain} domain={domain} />
|
|
)}
|
|
</ScrollableList>
|
|
</Column>
|
|
);
|
|
}
|
|
|
|
}
|