import PropTypes from "prop-types"; import { defineMessages, injectIntl } from "react-intl"; import { Helmet } from "react-helmet"; import { List as ImmutableList } from "immutable"; import ImmutablePropTypes from "react-immutable-proptypes"; import ImmutablePureComponent from "react-immutable-pure-component"; import { connect } from "react-redux"; import { fetchFollowRequests } from "mastodon/actions/accounts"; import Column from "mastodon/components/column"; import ColumnHeader from "mastodon/components/column_header"; import LinkFooter from "mastodon/features/ui/components/link_footer"; import { me, showTrends } from "../../initial_state"; import NavigationContainer from "../compose/containers/navigation_container"; import ColumnLink from "../ui/components/column_link"; import ColumnSubheading from "../ui/components/column_subheading"; import TrendsContainer from "./containers/trends_container"; const messages = defineMessages({ home_timeline: { id: "tabs_bar.home", defaultMessage: "Home" }, notifications: { id: "tabs_bar.notifications", defaultMessage: "Notifications" }, public_timeline: { id: "navigation_bar.public_timeline", defaultMessage: "Federated timeline" }, settings_subheading: { id: "column_subheading.settings", defaultMessage: "Settings" }, community_timeline: { id: "navigation_bar.community_timeline", defaultMessage: "Local timeline" }, explore: { id: "navigation_bar.explore", defaultMessage: "Explore" }, direct: { id: "navigation_bar.direct", defaultMessage: "Private mentions" }, bookmarks: { id: "navigation_bar.bookmarks", defaultMessage: "Bookmarks" }, preferences: { id: "navigation_bar.preferences", defaultMessage: "Preferences" }, follow_requests: { id: "navigation_bar.follow_requests", defaultMessage: "Follow requests" }, favourites: { id: "navigation_bar.favourites", defaultMessage: "Favorites" }, blocks: { id: "navigation_bar.blocks", defaultMessage: "Blocked users" }, domain_blocks: { id: "navigation_bar.domain_blocks", defaultMessage: "Blocked domains" }, mutes: { id: "navigation_bar.mutes", defaultMessage: "Muted users" }, pins: { id: "navigation_bar.pins", defaultMessage: "Pinned posts" }, lists: { id: "navigation_bar.lists", defaultMessage: "Lists" }, discover: { id: "navigation_bar.discover", defaultMessage: "Discover" }, personal: { id: "navigation_bar.personal", defaultMessage: "Personal" }, security: { id: "navigation_bar.security", defaultMessage: "Security" }, menu: { id: "getting_started.heading", defaultMessage: "Getting started" }, }); const mapStateToProps = state => ({ myAccount: state.getIn(["accounts", me]), unreadFollowRequests: state.getIn(["user_lists", "follow_requests", "items"], ImmutableList()).size, }); const mapDispatchToProps = dispatch => ({ fetchFollowRequests: () => dispatch(fetchFollowRequests()), }); const badgeDisplay = (number, limit) => { if (number === 0) { return undefined; } else if (limit && number >= limit) { return `${limit}+`; } else { return number; } }; class GettingStarted extends ImmutablePureComponent { static contextTypes = { router: PropTypes.object.isRequired, identity: PropTypes.object, }; static propTypes = { intl: PropTypes.object.isRequired, myAccount: ImmutablePropTypes.map, multiColumn: PropTypes.bool, fetchFollowRequests: PropTypes.func.isRequired, unreadFollowRequests: PropTypes.number, unreadNotifications: PropTypes.number, }; componentDidMount () { const { fetchFollowRequests } = this.props; const { signedIn } = this.context.identity; if (!signedIn) { return; } fetchFollowRequests(); } render () { const { intl, myAccount, multiColumn, unreadFollowRequests } = this.props; const { signedIn } = this.context.identity; const navItems = []; navItems.push( , ); if (showTrends) { navItems.push( , ); } navItems.push( , , ); if (signedIn) { navItems.push( , , , , , , ); if (myAccount.get("locked") || unreadFollowRequests > 0) { navItems.push(); } navItems.push( , , ); } return ( {(signedIn && !multiColumn) ? : }
{navItems}
{!multiColumn &&
}
{(multiColumn && showTrends) && } {intl.formatMessage(messages.menu)} ); } } export default connect(mapStateToProps, mapDispatchToProps)(injectIntl(GettingStarted));