Add some UI for user-defined domain blocks (#6628)
* Keep list of blocked domains Might be overkill, but I'm trying to follow the same logic as for blocked users * Add basic domain block UI * Add the domain blocks UI to Getting Started * Fix undefined URL in `fetchDomainBlocks` * Update all known users' domain_blocking relationship instead of just one's
This commit is contained in:
		
					parent
					
						
							
								47cee7cc8e
							
						
					
				
			
			
				commit
				
					
						a6c129ddbd
					
				
			
		
					 13 changed files with 271 additions and 17 deletions
				
			
		
							
								
								
									
										66
									
								
								app/javascript/mastodon/features/domain_blocks/index.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								app/javascript/mastodon/features/domain_blocks/index.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,66 @@ | |||
| import React from 'react'; | ||||
| import { connect } from 'react-redux'; | ||||
| import ImmutablePropTypes from 'react-immutable-proptypes'; | ||||
| import PropTypes from 'prop-types'; | ||||
| 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 { defineMessages, injectIntl } from 'react-intl'; | ||||
| import ImmutablePureComponent from 'react-immutable-pure-component'; | ||||
| import { debounce } from 'lodash'; | ||||
| 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, | ||||
|     domains: ImmutablePropTypes.list, | ||||
|     intl: PropTypes.object.isRequired, | ||||
|   }; | ||||
| 
 | ||||
|   componentWillMount () { | ||||
|     this.props.dispatch(fetchDomainBlocks()); | ||||
|   } | ||||
| 
 | ||||
|   handleLoadMore = debounce(() => { | ||||
|     this.props.dispatch(expandDomainBlocks()); | ||||
|   }, 300, { leading: true }); | ||||
| 
 | ||||
|   render () { | ||||
|     const { intl, domains } = this.props; | ||||
| 
 | ||||
|     if (!domains) { | ||||
|       return ( | ||||
|         <Column> | ||||
|           <LoadingIndicator /> | ||||
|         </Column> | ||||
|       ); | ||||
|     } | ||||
| 
 | ||||
|     return ( | ||||
|       <Column icon='ban' heading={intl.formatMessage(messages.heading)}> | ||||
|         <ColumnBackButtonSlim /> | ||||
|         <ScrollableList scrollKey='domain_blocks' onLoadMore={this.handleLoadMore}> | ||||
|           {domains.map(domain => | ||||
|             <DomainContainer key={domain} domain={domain} /> | ||||
|           )} | ||||
|         </ScrollableList> | ||||
|       </Column> | ||||
|     ); | ||||
|   } | ||||
| 
 | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue