2019-08-26 09:24:10 -07:00
import { connect } from 'react-redux' ;
2019-05-27 12:58:41 -07:00
import React from 'react' ;
import PropTypes from 'prop-types' ;
2019-08-26 09:24:10 -07:00
import { FormattedMessage , defineMessages , injectIntl } from 'react-intl' ;
2019-05-27 12:58:41 -07:00
import { Link } from 'react-router-dom' ;
2022-10-04 11:13:23 -07:00
import { version , repository , source _url , profile _directory as profileDirectory } from 'flavours/glitch/initial_state' ;
2022-10-11 01:41:15 -07:00
import { logOut } from 'flavours/glitch/utils/log_out' ;
2019-08-26 09:24:10 -07:00
import { openModal } from 'flavours/glitch/actions/modal' ;
2022-07-04 17:41:40 -07:00
import { PERMISSION _INVITE _USERS } from 'flavours/glitch/permissions' ;
2019-05-27 12:58:41 -07:00
2019-08-26 09:24:10 -07: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 03:14:13 -07:00
closeWhenConfirm : false ,
2019-08-26 09:24:10 -07:00
onConfirm : ( ) => logOut ( ) ,
} ) ) ;
} ,
} ) ;
export default @ injectIntl
@ connect ( null , mapDispatchToProps )
class LinkFooter extends React . PureComponent {
2022-07-04 17:41:40 -07:00
static contextTypes = {
identity : PropTypes . object ,
} ;
2019-08-26 09:24:10 -07:00
static propTypes = {
onLogout : PropTypes . func . isRequired ,
intl : PropTypes . object . isRequired ,
} ;
handleLogoutClick = e => {
e . preventDefault ( ) ;
e . stopPropagation ( ) ;
2019-05-27 12:58:41 -07:00
2019-08-26 09:24:10 -07:00
this . props . onLogout ( ) ;
2022-11-01 01:38:05 -07:00
2019-08-26 09:24:10 -07:00
return false ;
}
render ( ) {
2022-09-28 19:39:33 -07:00
const { signedIn , permissions } = this . context . identity ;
const items = [ ] ;
2022-10-04 11:13:23 -07: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 05:42:37 -07:00
items . push ( < Link key = 'about' to = '/about' > < FormattedMessage id = 'navigation_bar.info' defaultMessage = 'About' / > < / L i n k > ) ;
2022-10-04 11:13:23 -07: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-07 21:01:11 -07: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 11:13:23 -07:00
items . push ( < Link key = 'hotkeys' to = '/keyboard-shortcuts' > < FormattedMessage id = 'navigation_bar.keyboard_shortcuts' defaultMessage = 'Hotkeys' / > < / L i n k > ) ;
2022-09-28 19:39:33 -07:00
if ( profileDirectory ) {
2022-10-04 11:13:23 -07:00
items . push ( < Link key = 'directory' to = '/directory' > < FormattedMessage id = 'getting_started.directory' defaultMessage = 'Directory' / > < / L i n k > ) ;
2022-09-28 19:39:33 -07:00
}
if ( signedIn ) {
2022-10-04 11:13:23 -07: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 19:39:33 -07:00
2022-10-04 11:13:23 -07:00
items . push ( < a key = 'security' href = '/auth/edit' > < FormattedMessage id = 'getting_started.security' defaultMessage = 'Security' / > < / a > ) ;
2022-09-28 19:39:33 -07:00
items . push ( < a key = 'logout' href = '/auth/sign_out' onClick = { this . handleLogoutClick } > < FormattedMessage id = 'navigation_bar.logout' defaultMessage = 'Logout' / > < / a > ) ;
}
2019-08-26 09:24:10 -07:00
return (
< div className = 'getting-started__footer' >
< ul >
2022-09-28 19:39:33 -07:00
{ items . map ( ( item , index , array ) => (
< li > { item } { index === array . length - 1 ? null : ' · ' } < / l i >
) ) }
2019-08-26 09:24:10 -07:00
< / u l >
< p >
< FormattedMessage
id = 'getting_started.open_source_notice'
defaultMessage = 'Glitchsoc is open source software, a friendly fork of {Mastodon}. You can contribute or report issues on GitHub at {github}.'
values = { {
2021-09-08 04:47:48 -07:00
github : < span > < a href = { source _url } rel = 'noopener noreferrer' target = '_blank' > { repository } < / a > ( v { v e r s i o n } ) < / s p a n > ,
2022-11-01 01:38:05 -07:00
Mastodon : < a href = 'https://github.com/mastodon/mastodon' rel = 'noopener noreferrer' target = '_blank' > Mastodon < / a > } }
2019-08-26 09:24:10 -07:00
/ >
< / p >
< / d i v >
) ;
}
} ;