import { HomeIcon, SearchIcon, BookOpenIcon, DotsHorizontalIcon, CashIcon, HeartIcon, TrendingUpIcon, ChatIcon, ExternalLinkIcon, } from '@heroicons/react/outline' import clsx from 'clsx' import Link from 'next/link' import Router, { useRouter } from 'next/router' import { useUser } from 'web/hooks/use-user' import { firebaseLogout, User } from 'web/lib/firebase/users' import { ManifoldLogo } from './manifold-logo' import { MenuButton } from './menu' import { ProfileSummary } from './profile-menu' import NotificationsIcon from 'web/components/notifications-icon' import { ENV_CONFIG, IS_PRIVATE_MANIFOLD } from 'common/envs/constants' import React from 'react' import { CreateQuestionButton } from 'web/components/create-question-button' import { trackCallback, withTracking } from 'web/lib/service/analytics' import { Spacer } from '../layout/spacer' import { CHALLENGES_ENABLED } from 'common/challenge' const logout = async () => { // log out, and then reload the page, in case SSR wants to boot them out // of whatever logged-in-only area of the site they might be in await withTracking(firebaseLogout, 'sign out')() await Router.replace(Router.asPath) } function getNavigation() { return [ { name: 'Home', href: '/home', icon: HomeIcon }, { name: 'Notifications', href: `/notifications`, icon: NotificationsIcon, }, { name: 'Leaderboard', href: '/leaderboards', icon: TrendingUpIcon }, ...(IS_PRIVATE_MANIFOLD ? [ { name: 'Rules', href: 'https://www.cspicenter.com/p/introducing-the-salemcspi-forecasting', icon: BookOpenIcon, }, ] : [{ name: 'Get M$', href: '/add-funds', icon: CashIcon }]), ] } function getMoreNavigation(user?: User | null) { if (IS_PRIVATE_MANIFOLD) { return [ { name: 'Discord', href: 'https://discord.gg/ZtT7PxapSS' }, { name: 'Manifold Markets', href: 'https://manifold.markets' }, { name: 'Sign out', href: '#', onClick: withTracking(firebaseLogout, 'sign out'), }, ] } if (!user) { if (CHALLENGES_ENABLED) return [ { name: 'Challenges', href: '/challenges' }, { name: 'Charity', href: '/charity' }, { name: 'Blog', href: 'https://news.manifold.markets' }, { name: 'Discord', href: 'https://discord.gg/eHQBNBqXuh' }, { name: 'Twitter', href: 'https://twitter.com/ManifoldMarkets' }, ] else return [ { name: 'Charity', href: '/charity' }, { name: 'Blog', href: 'https://news.manifold.markets' }, { name: 'Discord', href: 'https://discord.gg/eHQBNBqXuh' }, { name: 'Twitter', href: 'https://twitter.com/ManifoldMarkets' }, ] } if (CHALLENGES_ENABLED) return [ { name: 'Challenges', href: '/challenges' }, { name: 'Referrals', href: '/referrals' }, { name: 'Charity', href: '/charity' }, { name: 'Send M$', href: '/links' }, { name: 'Discord', href: 'https://discord.gg/eHQBNBqXuh' }, { name: 'About', href: 'https://docs.manifold.markets/$how-to' }, { name: 'Sign out', href: '#', onClick: logout, }, ] else return [ { name: 'Referrals', href: '/referrals' }, { name: 'Charity', href: '/charity' }, { name: 'Send M$', href: '/links' }, { name: 'Discord', href: 'https://discord.gg/eHQBNBqXuh' }, { name: 'About', href: 'https://docs.manifold.markets/$how-to' }, { name: 'Sign out', href: '#', onClick: logout, }, ] } const signedOutNavigation = [ { name: 'Home', href: '/home', icon: HomeIcon }, { name: 'Explore', href: '/markets', icon: SearchIcon }, ] const signedOutMobileNavigation = IS_PRIVATE_MANIFOLD ? [ { name: 'Leaderboard', href: '/leaderboards', icon: TrendingUpIcon }, { name: 'Rules', href: 'https://www.cspicenter.com/p/introducing-the-salemcspi-forecasting', icon: BookOpenIcon, }, { name: 'Discord', href: 'https://discord.gg/ZtT7PxapSS', icon: ChatIcon, }, { name: 'Manifold Markets', href: 'https://manifold.markets', icon: ExternalLinkIcon, }, ] : [ { name: 'Charity', href: '/charity', icon: HeartIcon }, { name: 'Leaderboards', href: '/leaderboards', icon: TrendingUpIcon }, { name: 'Discord', href: 'https://discord.gg/eHQBNBqXuh', icon: ChatIcon, }, ] const signedInMobileNavigation = [ { name: 'Leaderboard', href: '/leaderboards', icon: TrendingUpIcon }, ...(IS_PRIVATE_MANIFOLD ? [ { name: 'Rules', href: 'https://www.cspicenter.com/p/introducing-the-salemcspi-forecasting', icon: BookOpenIcon, }, { name: 'Discord', href: 'https://discord.gg/ZtT7PxapSS', icon: ChatIcon, }, { name: 'Manifold Markets', href: 'https://manifold.markets', icon: ExternalLinkIcon, }, ] : [ { name: 'Get M$', href: '/add-funds', icon: CashIcon }, { name: 'About', href: 'https://docs.manifold.markets/$how-to', icon: BookOpenIcon, }, ]), ] function getMoreMobileNav() { return [ ...(IS_PRIVATE_MANIFOLD ? [] : CHALLENGES_ENABLED ? [ { name: 'Challenges', href: '/challenges' }, { name: 'Referrals', href: '/referrals' }, { name: 'Charity', href: '/charity' }, { name: 'Send M$', href: '/links' }, { name: 'Discord', href: 'https://discord.gg/eHQBNBqXuh' }, ] : [ { name: 'Referrals', href: '/referrals' }, { name: 'Charity', href: '/charity' }, { name: 'Send M$', href: '/links' }, { name: 'Discord', href: 'https://discord.gg/eHQBNBqXuh' }, ]), { name: 'Sign out', href: '#', onClick: logout, }, ] } export type Item = { name: string trackingEventName?: string href: string icon?: React.ComponentType<{ className?: string }> } function SidebarItem(props: { item: Item; currentPage: string }) { const { item, currentPage } = props return ( {item.icon && ( ) } function SidebarButton(props: { text: string icon: React.ComponentType<{ className?: string }> children?: React.ReactNode }) { const { text, children } = props return ( ) } function MoreButton() { return } export default function Sidebar(props: { className?: string }) { const { className } = props const router = useRouter() const currentPage = router.pathname const user = useUser() // usePing(user?.id) const navigationOptions = !user ? signedOutNavigation : getNavigation() const mobileNavigationOptions = !user ? signedOutMobileNavigation : signedInMobileNavigation return ( ) }