2017-05-02 19:04:16 -05:00
import React from 'react' ;
2017-01-30 14:40:55 -06:00
import ImmutablePropTypes from 'react-immutable-proptypes' ;
2017-04-21 13:05:35 -05:00
import PropTypes from 'prop-types' ;
2017-12-04 01:26:40 -06:00
import InnerHeader from 'flavours/glitch/features/account/components/header' ;
import ActionBar from 'flavours/glitch/features/account/components/action_bar' ;
2017-05-02 19:04:16 -05:00
import ImmutablePureComponent from 'react-immutable-pure-component' ;
2018-03-16 13:54:00 -05:00
import { FormattedMessage } from 'react-intl' ;
import { NavLink } from 'react-router-dom' ;
2018-03-29 07:43:20 -05:00
import MovedNote from './moved_note' ;
2017-01-30 14:40:55 -06:00
2017-06-23 12:36:54 -05:00
export default class Header extends ImmutablePureComponent {
2017-01-30 14:40:55 -06:00
2017-05-12 07:44:10 -05:00
static propTypes = {
account : ImmutablePropTypes . map ,
2019-03-28 12:01:09 -05:00
identity _proofs : ImmutablePropTypes . list ,
2017-05-12 07:44:10 -05:00
onFollow : PropTypes . func . isRequired ,
onBlock : PropTypes . func . isRequired ,
onMention : PropTypes . func . isRequired ,
2018-03-29 14:13:47 -05:00
onDirect : PropTypes . func . isRequired ,
2017-11-09 08:41:10 -06:00
onReblogToggle : PropTypes . func . isRequired ,
2017-05-12 07:44:10 -05:00
onReport : PropTypes . func . isRequired ,
2017-05-19 14:05:32 -05:00
onMute : PropTypes . func . isRequired ,
onBlockDomain : PropTypes . func . isRequired ,
onUnblockDomain : PropTypes . func . isRequired ,
2018-08-10 09:25:46 -05:00
onEndorseToggle : PropTypes . func . isRequired ,
2018-11-06 10:44:28 -06:00
onAddToList : PropTypes . func . isRequired ,
2018-03-16 14:29:42 -05:00
hideTabs : PropTypes . bool ,
2019-03-25 18:36:25 -05:00
domain : PropTypes . string . isRequired ,
2017-05-12 07:44:10 -05:00
} ;
static contextTypes = {
2017-05-20 10:31:47 -05:00
router : PropTypes . object ,
2017-05-12 07:44:10 -05:00
} ;
2017-01-30 14:40:55 -06:00
2017-05-12 07:44:10 -05:00
handleFollow = ( ) => {
2017-01-30 14:40:55 -06:00
this . props . onFollow ( this . props . account ) ;
2017-04-21 13:05:35 -05:00
}
2017-01-30 14:40:55 -06:00
2017-05-12 07:44:10 -05:00
handleBlock = ( ) => {
2017-01-30 14:40:55 -06:00
this . props . onBlock ( this . props . account ) ;
2017-04-21 13:05:35 -05:00
}
2017-01-30 14:40:55 -06:00
2017-05-12 07:44:10 -05:00
handleMention = ( ) => {
2017-06-20 13:40:03 -05:00
this . props . onMention ( this . props . account , this . context . router . history ) ;
2017-04-21 13:05:35 -05:00
}
2017-01-30 14:40:55 -06:00
2018-03-29 14:13:47 -05:00
handleDirect = ( ) => {
this . props . onDirect ( this . props . account , this . context . router . history ) ;
}
2017-05-12 07:44:10 -05:00
handleReport = ( ) => {
2017-02-14 13:59:26 -06:00
this . props . onReport ( this . props . account ) ;
2017-04-21 13:05:35 -05:00
}
2017-02-14 13:59:26 -06:00
2017-11-09 08:41:10 -06:00
handleReblogToggle = ( ) => {
this . props . onReblogToggle ( this . props . account ) ;
}
2020-09-18 10:26:45 -05:00
handleNotifyToggle = ( ) => {
this . props . onNotifyToggle ( this . props . account ) ;
}
2017-05-12 07:44:10 -05:00
handleMute = ( ) => {
2017-02-05 19:51:56 -06:00
this . props . onMute ( this . props . account ) ;
2017-04-21 13:05:35 -05:00
}
2017-02-05 19:51:56 -06:00
2017-05-19 14:05:32 -05:00
handleBlockDomain = ( ) => {
const domain = this . props . account . get ( 'acct' ) . split ( '@' ) [ 1 ] ;
if ( ! domain ) return ;
2018-03-04 16:38:00 -06:00
this . props . onBlockDomain ( domain ) ;
2017-05-19 14:05:32 -05:00
}
handleUnblockDomain = ( ) => {
const domain = this . props . account . get ( 'acct' ) . split ( '@' ) [ 1 ] ;
if ( ! domain ) return ;
2018-03-04 16:38:00 -06:00
this . props . onUnblockDomain ( domain ) ;
2017-05-19 14:05:32 -05:00
}
2018-08-10 09:25:46 -05:00
handleEndorseToggle = ( ) => {
this . props . onEndorseToggle ( this . props . account ) ;
}
2018-11-06 10:44:28 -06:00
handleAddToList = ( ) => {
this . props . onAddToList ( this . props . account ) ;
}
2020-06-30 12:19:50 -05:00
handleEditAccountNote = ( ) => {
this . props . onEditAccountNote ( this . props . account ) ;
}
2017-01-30 14:40:55 -06:00
render ( ) {
2019-03-28 12:01:09 -05:00
const { account , hideTabs , identity _proofs } = this . props ;
2017-01-30 14:40:55 -06:00
2017-02-26 16:06:27 -06:00
if ( account === null ) {
2019-04-08 22:02:48 -05:00
return null ;
2017-01-30 14:40:55 -06:00
}
return (
2017-04-22 21:26:55 -05:00
< div className = 'account-timeline__header' >
2018-03-29 07:43:20 -05:00
{ account . get ( 'moved' ) && < MovedNote from = { account } to = { account . get ( 'moved' ) } / > }
2017-01-30 14:40:55 -06:00
< InnerHeader
account = { account }
2019-03-28 12:01:09 -05:00
identity _proofs = { identity _proofs }
2017-01-30 14:40:55 -06:00
onFollow = { this . handleFollow }
2018-03-05 04:09:29 -06:00
onBlock = { this . handleBlock }
2019-03-25 23:31:09 -05:00
onMention = { this . handleMention }
onDirect = { this . handleDirect }
onReblogToggle = { this . handleReblogToggle }
2020-09-18 10:26:45 -05:00
onNotifyToggle = { this . handleNotifyToggle }
2019-03-25 23:31:09 -05:00
onReport = { this . handleReport }
onMute = { this . handleMute }
onBlockDomain = { this . handleBlockDomain }
onUnblockDomain = { this . handleUnblockDomain }
onEndorseToggle = { this . handleEndorseToggle }
onAddToList = { this . handleAddToList }
2020-06-30 12:19:50 -05:00
onEditAccountNote = { this . handleEditAccountNote }
2019-03-25 18:36:25 -05:00
domain = { this . props . domain }
2017-01-30 14:40:55 -06:00
/ >
< ActionBar
account = { account }
/ >
2018-03-16 13:54:00 -05:00
2018-03-16 14:29:42 -05:00
{ ! hideTabs && (
< div className = 'account__section-headline' >
< NavLink exact to = { ` /accounts/ ${ account . get ( 'id' ) } ` } > < FormattedMessage id = 'account.posts' defaultMessage = 'Toots' / > < / N a v L i n k >
< NavLink exact to = { ` /accounts/ ${ account . get ( 'id' ) } /with_replies ` } > < FormattedMessage id = 'account.posts_with_replies' defaultMessage = 'Toots with replies' / > < / N a v L i n k >
< NavLink exact to = { ` /accounts/ ${ account . get ( 'id' ) } /media ` } > < FormattedMessage id = 'account.media' defaultMessage = 'Media' / > < / N a v L i n k >
< / d i v >
) }
2017-01-30 14:40:55 -06:00
< / d i v >
) ;
}
2017-04-21 13:05:35 -05:00
2017-05-12 07:44:10 -05:00
}