import clsx from 'clsx' import { useRouter } from 'next/router' import { useEffect, useState } from 'react' import { ChevronLeftIcon, ChevronRightIcon, ExclamationCircleIcon, } from '@heroicons/react/solid' import { User } from 'common/user' import { useUser } from 'web/hooks/use-user' import { updateUser } from 'web/lib/firebase/users' import { Col } from '../layout/col' import { Modal } from '../layout/modal' import { Row } from '../layout/row' import { Title } from '../title' import GroupSelectorDialog from './group-selector-dialog' export default function Welcome() { const user = useUser() const [open, setOpen] = useState(true) const [page, setPage] = useState(0) const TOTAL_PAGES = 4 function increasePage() { if (page < TOTAL_PAGES - 1) { setPage(page + 1) } } function decreasePage() { if (page > 0) { setPage(page - 1) } } const setUserHasSeenWelcome = async () => { if (user) await updateUser(user.id, { ['shouldShowWelcome']: false }) } const [groupSelectorOpen, setGroupSelectorOpen] = useState(false) const toggleOpen = (isOpen: boolean) => { setUserHasSeenWelcome() setOpen(isOpen) if (!isOpen) { setGroupSelectorOpen(true) } } const isTwitch = useIsTwitch(user) if (isTwitch || !user || (!user.shouldShowWelcome && !groupSelectorOpen)) return <> return ( <> setGroupSelectorOpen(false)} /> {page === 0 && } {page === 1 && } {page === 2 && } {page === 3 && } toggleOpen(false)} > I got the gist, exit welcome ) } const useIsTwitch = (user: User | null | undefined) => { const router = useRouter() const isTwitch = router.pathname === '/twitch' useEffect(() => { if (isTwitch && user?.shouldShowWelcome) { updateUser(user.id, { ['shouldShowWelcome']: false }) } }, [isTwitch, user]) return isTwitch } function PageIndicator(props: { page: number; totalpages: number }) { const { page, totalpages } = props return ( {[...Array(totalpages)].map((e, i) => (
))} ) } function Page0() { return ( <> <p> Manifold Markets is a place where anyone can ask a question about the future. </p> <div className="mt-4">For example,</div> <div className="mt-2 font-normal text-indigo-700"> “Will Michelle Obama be the next president of the United States?” </div> </> ) } function Page1() { return ( <> <p> Your question becomes a prediction market that people can bet{' '} <span className="font-normal text-indigo-700">mana (M$)</span> on. </p> <div className="mt-8 font-semibold">The core idea</div> <div className="mt-2"> If people have to put their mana where their mouth is, you’ll get a pretty accurate answer! </div> <video loop autoPlay className="my-4 h-full w-full"> <source src="/welcome/mana-example.mp4" type="video/mp4" /> Your browser does not support video </video> </> ) } function Page2() { return ( <> <p> <span className="mt-4 font-normal text-indigo-700">Mana (M$)</span> is the play money you bet with. You can also turn it into a real donation to charity, at a 100:1 ratio. </p> <Row className="bg-greyscale-1 border-greyscale-2 mt-4 gap-2 rounded border py-2 pl-2 pr-4 text-sm text-indigo-700"> <ExclamationCircleIcon className="h-5 w-5" /> Mana can not be traded in for real money. </Row> <div className="mt-8 font-semibold">Example</div> <p className="mt-2"> When you donate <span className="font-semibold">M$1000</span> to Givewell, Manifold sends them{' '} <span className="font-semibold">$10 USD</span>. </p> <video loop autoPlay className="z-0 h-full w-full"> <source src="/welcome/charity.mp4" type="video/mp4" /> Your browser does not support video </video> </> ) } function Page3() { return ( <> <img className="mx-auto object-contain" src="/welcome/treasure.png" /> <Title className="mx-auto" text="Let's start predicting!" /> <p className="mb-8"> As a thank you for signing up, we’ve sent you{' '} <span className="font-normal text-indigo-700">M$1000 Mana</span>{' '} </p> </> ) }