2022-10-09 16:55:32 +03:00
import PropTypes from 'prop-types' ;
2023-05-28 17:38:10 +03:00
import { Component } from 'react' ;
2022-10-09 16:55:32 +03:00
import { defineMessages , injectIntl } from 'react-intl' ;
2023-05-28 17:38:10 +03:00
import NavigationPortal from 'flavours/glitch/components/navigation_portal' ;
2023-07-08 21:00:12 +03:00
import { timelinePreview , trendsEnabled } from 'flavours/glitch/initial_state' ;
2023-07-13 18:18:09 +03:00
import { transientSingleColumn } from 'flavours/glitch/is_mobile' ;
2023-05-28 17:38:10 +03:00
import { preferencesLink } from 'flavours/glitch/utils/backend_links' ;
2023-05-07 19:22:25 +03:00
import ColumnLink from './column_link' ;
2022-11-05 19:28:13 +02:00
import DisabledAccountBanner from './disabled_account_banner' ;
2022-10-09 16:55:32 +03:00
import FollowRequestsColumnLink from './follow_requests_column_link' ;
2019-05-25 22:27:00 +03:00
import ListPanel from './list_panel' ;
2022-10-09 04:49:51 +03:00
import NotificationsCounterIcon from './notifications_counter_icon' ;
2022-09-29 05:39:33 +03:00
import SignInBanner from './sign_in_banner' ;
2022-10-09 16:55:32 +03:00
const messages = defineMessages ( {
home : { id : 'tabs_bar.home' , defaultMessage : 'Home' } ,
notifications : { id : 'tabs_bar.notifications' , defaultMessage : 'Notifications' } ,
explore : { id : 'explore.title' , defaultMessage : 'Explore' } ,
2023-07-02 01:05:10 +03:00
firehose : { id : 'column.firehose' , defaultMessage : 'Live feeds' } ,
2023-06-11 14:33:45 +03:00
direct : { id : 'navigation_bar.direct' , defaultMessage : 'Private mentions' } ,
2023-07-21 20:09:13 +03:00
favourites : { id : 'navigation_bar.favourites' , defaultMessage : 'Favorites' } ,
2022-10-09 16:55:32 +03:00
bookmarks : { id : 'navigation_bar.bookmarks' , defaultMessage : 'Bookmarks' } ,
lists : { id : 'navigation_bar.lists' , defaultMessage : 'Lists' } ,
preferences : { id : 'navigation_bar.preferences' , defaultMessage : 'Preferences' } ,
followsAndFollowers : { id : 'navigation_bar.follows_and_followers' , defaultMessage : 'Follows and followers' } ,
about : { id : 'navigation_bar.about' , defaultMessage : 'About' } ,
2022-10-25 20:03:16 +03:00
search : { id : 'navigation_bar.search' , defaultMessage : 'Search' } ,
2023-07-13 18:18:09 +03:00
advancedInterface : { id : 'navigation_bar.advanced_interface' , defaultMessage : 'Open in advanced web interface' } ,
2023-08-31 13:18:46 +03:00
openedInClassicInterface : { id : 'navigation_bar.opened_in_classic_interface' , defaultMessage : 'Posts, accounts, and other specific pages are opened by default in the classic web interface.' } ,
2022-10-09 16:55:32 +03:00
app _settings : { id : 'navigation_bar.app_settings' , defaultMessage : 'App settings' } ,
} ) ;
2019-05-25 22:27:00 +03:00
2023-05-28 15:18:23 +03:00
class NavigationPanel extends Component {
2019-05-25 22:27:00 +03:00
2022-09-29 05:39:33 +03:00
static contextTypes = {
router : PropTypes . object . isRequired ,
identity : PropTypes . object . isRequired ,
} ;
2019-05-25 22:27:00 +03:00
2022-09-29 05:39:33 +03:00
static propTypes = {
2023-05-07 19:22:25 +03:00
intl : PropTypes . object . isRequired ,
2022-09-29 05:39:33 +03:00
onOpenSettings : PropTypes . func ,
} ;
2019-05-25 22:27:00 +03:00
2023-07-02 01:05:10 +03:00
isFirehoseActive = ( match , location ) => {
return match || location . pathname . startsWith ( '/public' ) ;
} ;
2022-09-29 05:39:33 +03:00
render ( ) {
2022-10-09 16:55:32 +03:00
const { intl , onOpenSettings } = this . props ;
2022-11-05 19:28:13 +02:00
const { signedIn , disabledAccountId } = this . context . identity ;
2019-08-06 18:57:52 +03:00
2022-09-29 05:39:33 +03:00
return (
< div className = 'navigation-panel' >
2023-07-13 18:18:09 +03:00
{ transientSingleColumn && (
2023-07-22 18:22:04 +03:00
< div className = 'navigation-panel__logo' >
2023-10-19 14:22:44 +03:00
< div className = 'switch-to-advanced' >
2023-08-31 13:18:46 +03:00
{ intl . formatMessage ( messages . openedInClassicInterface ) }
{ " " }
2023-10-19 14:22:44 +03:00
< a href = { ` /deck ${ location . pathname } ` } className = 'switch-to-advanced__toggle' >
2023-08-31 13:18:46 +03:00
{ intl . formatMessage ( messages . advancedInterface ) }
< / a >
< / div >
2023-07-13 18:18:09 +03:00
< hr / >
2023-07-22 18:22:04 +03:00
< / div >
2023-07-13 18:18:09 +03:00
) }
2022-09-29 05:39:33 +03:00
{ signedIn && (
2023-05-28 15:56:24 +03:00
< >
2022-10-09 16:55:32 +03:00
< ColumnLink transparent to = '/home' icon = 'home' text = { intl . formatMessage ( messages . home ) } / >
< ColumnLink transparent to = '/notifications' icon = { < NotificationsCounterIcon className = 'column-link__icon' / > } text = { intl . formatMessage ( messages . notifications ) } / >
< FollowRequestsColumnLink / >
2023-05-28 15:56:24 +03:00
< / >
2022-09-29 05:39:33 +03:00
) }
2019-05-25 22:27:00 +03:00
2023-07-08 21:00:12 +03:00
{ trendsEnabled ? (
2022-10-25 20:03:16 +03:00
< ColumnLink transparent to = '/explore' icon = 'hashtag' text = { intl . formatMessage ( messages . explore ) } / >
) : (
< ColumnLink transparent to = '/search' icon = 'search' text = { intl . formatMessage ( messages . search ) } / >
) }
2022-10-09 20:26:14 +03:00
{ ( signedIn || timelinePreview ) && (
2023-07-02 01:05:10 +03:00
< ColumnLink transparent to = '/public/local' isActive = { this . isFirehoseActive } icon = 'globe' text = { intl . formatMessage ( messages . firehose ) } / >
2022-10-09 04:49:51 +03:00
) }
2022-09-29 05:39:33 +03:00
{ ! signedIn && (
2022-10-04 21:13:23 +03:00
< div className = 'navigation-panel__sign-in-banner' >
2022-09-29 05:39:33 +03:00
< hr / >
2022-11-05 19:28:13 +02:00
{ disabledAccountId ? < DisabledAccountBanner / > : < SignInBanner / > }
2022-10-04 21:13:23 +03:00
< / div >
2022-09-29 05:39:33 +03:00
) }
{ signedIn && (
2023-05-28 15:56:24 +03:00
< >
2022-10-09 16:55:32 +03:00
< ColumnLink transparent to = '/conversations' icon = 'at' text = { intl . formatMessage ( messages . direct ) } / >
< ColumnLink transparent to = '/bookmarks' icon = 'bookmark' text = { intl . formatMessage ( messages . bookmarks ) } / >
2023-03-03 21:37:49 +02:00
< ColumnLink transparent to = '/favourites' icon = 'star' text = { intl . formatMessage ( messages . favourites ) } / >
2022-10-09 16:55:32 +03:00
< ColumnLink transparent to = '/lists' icon = 'list-ul' text = { intl . formatMessage ( messages . lists ) } / >
2022-09-29 05:39:33 +03:00
< ListPanel / >
< hr / >
2022-10-09 16:55:32 +03:00
{ ! ! preferencesLink && < ColumnLink transparent href = { preferencesLink } icon = 'cog' text = { intl . formatMessage ( messages . preferences ) } / > }
2022-11-01 10:38:55 +02:00
< ColumnLink transparent onClick = { onOpenSettings } icon = 'cogs' text = { intl . formatMessage ( messages . app _settings ) } / >
2023-05-28 15:56:24 +03:00
< / >
2022-09-29 05:39:33 +03:00
) }
2022-10-04 21:13:23 +03:00
< div className = 'navigation-panel__legal' >
< hr / >
2022-10-28 18:14:02 +03:00
< ColumnLink transparent to = '/about' icon = 'ellipsis-h' text = { intl . formatMessage ( messages . about ) } / >
2022-10-04 21:13:23 +03:00
< / div >
2022-10-19 12:30:59 +03:00
< NavigationPortal / >
2022-09-29 05:39:33 +03:00
< / div >
) ;
}
}
2023-03-25 00:15:25 +02:00
export default injectIntl ( NavigationPanel ) ;