2019-08-26 12:24:10 -04:00
import { connect } from 'react-redux' ;
2019-05-27 15:58:41 -04:00
import React from 'react' ;
import PropTypes from 'prop-types' ;
2019-08-26 12:24:10 -04:00
import { FormattedMessage , defineMessages , injectIntl } from 'react-intl' ;
2019-05-27 15:58:41 -04:00
import { Link } from 'react-router-dom' ;
2022-10-04 14:13:23 -04:00
import { version , repository , source _url , profile _directory as profileDirectory } from 'mastodon/initial_state' ;
2019-08-26 12:24:10 -04:00
import { logOut } from 'mastodon/utils/log_out' ;
import { openModal } from 'mastodon/actions/modal' ;
2022-07-04 20:41:40 -04:00
import { PERMISSION _INVITE _USERS } from 'mastodon/permissions' ;
2019-05-27 15:58:41 -04:00
2019-08-26 12:24:10 -04:00
const messages = defineMessages ( {
logoutMessage : { id : 'confirmations.logout.message' , defaultMessage : 'Are you sure you want to log out?' } ,
logoutConfirm : { id : 'confirmations.logout.confirm' , defaultMessage : 'Log out' } ,
} ) ;
const mapDispatchToProps = ( dispatch , { intl } ) => ( {
onLogout ( ) {
dispatch ( openModal ( 'CONFIRM' , {
message : intl . formatMessage ( messages . logoutMessage ) ,
confirm : intl . formatMessage ( messages . logoutConfirm ) ,
2021-08-06 06:14:13 -04:00
closeWhenConfirm : false ,
2019-08-26 12:24:10 -04:00
onConfirm : ( ) => logOut ( ) ,
} ) ) ;
} ,
} ) ;
export default @ injectIntl
@ connect ( null , mapDispatchToProps )
class LinkFooter extends React . PureComponent {
2022-07-04 20:41:40 -04:00
static contextTypes = {
identity : PropTypes . object ,
} ;
2019-08-26 12:24:10 -04:00
static propTypes = {
onLogout : PropTypes . func . isRequired ,
intl : PropTypes . object . isRequired ,
} ;
handleLogoutClick = e => {
e . preventDefault ( ) ;
e . stopPropagation ( ) ;
this . props . onLogout ( ) ;
2019-05-27 15:58:41 -04:00
2019-08-26 12:24:10 -04:00
return false ;
}
render ( ) {
2022-09-28 22:39:33 -04:00
const { signedIn , permissions } = this . context . identity ;
const items = [ ] ;
2022-10-04 14:13:23 -04:00
items . push ( < a key = 'apps' href = 'https://joinmastodon.org/apps' target = '_blank' > < FormattedMessage id = 'navigation_bar.apps' defaultMessage = 'Get the app' / > < / a > ) ;
2022-10-13 08:42:37 -04:00
items . push ( < Link key = 'about' to = '/about' > < FormattedMessage id = 'navigation_bar.info' defaultMessage = 'About' / > < / L i n k > ) ;
2022-10-04 14:13:23 -04:00
items . push ( < a key = 'mastodon' href = 'https://joinmastodon.org' target = '_blank' > < FormattedMessage id = 'getting_started.what_is_mastodon' defaultMessage = 'About Mastodon' / > < / a > ) ;
items . push ( < a key = 'docs' href = 'https://docs.joinmastodon.org' target = '_blank' > < FormattedMessage id = 'getting_started.documentation' defaultMessage = 'Documentation' / > < / a > ) ;
2022-10-08 00:01:11 -04:00
items . push ( < Link key = 'privacy-policy' to = '/privacy-policy' > < FormattedMessage id = 'getting_started.privacy_policy' defaultMessage = 'Privacy Policy' / > < / L i n k > ) ;
2022-10-04 14:13:23 -04:00
items . push ( < Link key = 'hotkeys' to = '/keyboard-shortcuts' > < FormattedMessage id = 'navigation_bar.keyboard_shortcuts' defaultMessage = 'Hotkeys' / > < / L i n k > ) ;
2022-09-28 22:39:33 -04:00
if ( profileDirectory ) {
2022-10-04 14:13:23 -04:00
items . push ( < Link key = 'directory' to = '/directory' > < FormattedMessage id = 'getting_started.directory' defaultMessage = 'Directory' / > < / L i n k > ) ;
2022-09-28 22:39:33 -04:00
}
if ( signedIn ) {
2022-10-04 14:13:23 -04:00
if ( ( permissions & PERMISSION _INVITE _USERS ) === PERMISSION _INVITE _USERS ) {
items . push ( < a key = 'invites' href = '/invites' target = '_blank' > < FormattedMessage id = 'getting_started.invite' defaultMessage = 'Invite people' / > < / a > ) ;
}
2022-09-28 22:39:33 -04:00
2022-10-04 14:13:23 -04:00
items . push ( < a key = 'security' href = '/auth/edit' > < FormattedMessage id = 'getting_started.security' defaultMessage = 'Security' / > < / a > ) ;
2022-09-28 22:39:33 -04:00
items . push ( < a key = 'logout' href = '/auth/sign_out' onClick = { this . handleLogoutClick } > < FormattedMessage id = 'navigation_bar.logout' defaultMessage = 'Logout' / > < / a > ) ;
}
2019-08-26 12:24:10 -04:00
return (
< div className = 'getting-started__footer' >
< ul >
2022-09-28 22:39:33 -04:00
< li > { items . reduce ( ( prev , curr ) => [ prev , ' · ' , curr ] ) } < / l i >
2019-08-26 12:24:10 -04:00
< / u l >
< p >
< FormattedMessage
2022-10-04 14:13:23 -04:00
id = 'getting_started.free_software_notice'
defaultMessage = 'Mastodon is free, open source software. You can view the source code, contribute or report issues at {repository}.'
values = { { repository : < span > < a href = { source _url } rel = 'noopener noreferrer' target = '_blank' > { repository } < / a > ( v { v e r s i o n } ) < / s p a n > } }
2019-08-26 12:24:10 -04:00
/ >
< / p >
< / d i v >
) ;
}
} ;