import clsx from 'clsx' import { User } from 'common/user' import { useEffect, useState } from 'react' import { usePrefetchUsers, useUserById } from 'web/hooks/use-user' import { Col } from './layout/col' import { Modal } from './layout/modal' import { Tabs } from './layout/tabs' import { Row } from 'web/components/layout/row' import { Avatar } from 'web/components/avatar' import { useReferrals } from 'web/hooks/use-referrals' import { FilterSelectUsers } from 'web/components/filter-select-users' import { getUser, updateUser } from 'web/lib/firebase/users' import { TextButton } from 'web/components/text-button' import { UserLink } from 'web/components/user-link' import { Button } from './button' export function ReferralsButton(props: { user: User currentUser?: User className?: string }) { const { user, currentUser, className } = props const [isOpen, setIsOpen] = useState(false) const referralIds = useReferrals(user.id) return ( <> setIsOpen(true)} className={className}> {referralIds?.length ?? ''}{' '} Referrals ) } function ReferralsDialog(props: { user: User referralIds: string[] isOpen: boolean setIsOpen: (isOpen: boolean) => void currentUser?: User }) { const { user, referralIds, isOpen, setIsOpen, currentUser } = props const [referredBy, setReferredBy] = useState([]) const [isSubmitting, setIsSubmitting] = useState(false) const [errorText, setErrorText] = useState('') const [referredByUser, setReferredByUser] = useState() useEffect(() => { if (isOpen && !referredByUser && user?.referredByUserId) { getUser(user.referredByUserId).then((user) => { setReferredByUser(user) }) } }, [isOpen, referredByUser, user.referredByUserId]) usePrefetchUsers(referralIds) return (
{user.name}
@{user.username}
, }, { title: 'Referred by', content: ( <> {user.id === currentUser?.id && !referredByUser ? ( <> {referredBy.length > 0 && 'Careful: you can only set who referred you once!'} {errorText} ) : (
{referredByUser ? ( ) : ( No one... )}
)} ), }, ]} />
) } function ReferralsList(props: { userIds: string[] }) { const { userIds } = props return ( {userIds.length === 0 && (
No users yet...
)} {userIds.map((userId) => ( ))} ) } function UserReferralItem(props: { userId: string; className?: string }) { const { userId, className } = props const user = useUserById(userId) return ( {user && } ) }