import { createContext, useCallback, useContext, useEffect, useState } from 'react' import AnonIcon from '../svgs/spy-fill.svg' import { useRouter } from 'next/router' import cookie from 'cookie' import { useMe, useMeRefresh } from './me' import Image from 'react-bootstrap/Image' import Link from 'next/link' const AccountContext = createContext() const b64Decode = str => Buffer.from(str, 'base64').toString('utf-8') export const AccountProvider = ({ children }) => { const me = useMe() const [accounts, setAccounts] = useState() useEffect(() => { try { const { multi_auth: multiAuthCookie } = cookie.parse(document.cookie) const accounts = multiAuthCookie ? JSON.parse(b64Decode(multiAuthCookie)) : me ? [{ id: me.id, name: me.name, photoId: me.photoId }] : [] setAccounts(accounts) } catch (err) { console.error('error parsing cookies:', err) } }, []) const addAccount = useCallback(user => { setAccounts(accounts => [...accounts, user]) }, [setAccounts]) const removeAccount = useCallback(userId => { setAccounts(accounts => accounts.filter(({ id }) => id !== userId)) }, [setAccounts]) return {children} } const useAccounts = () => useContext(AccountContext) const AnonAccount = () => { const me = useMe() const refreshMe = useMeRefresh() return (
{ document.cookie = 'multi_auth.user-id=anonymous' refreshMe() }} />
anonymous
{!me &&
selected
}
) } const Account = ({ account, className }) => { const me = useMe() const refreshMe = useMeRefresh() const src = account.photoId ? `https://${process.env.NEXT_PUBLIC_MEDIA_DOMAIN}/${account.photoId}` : '/dorian400.jpg' return (
{ document.cookie = `multi_auth.user-id=${account.id}` refreshMe() }} /> @{account.name} {Number(me?.id) === Number(account.id) &&
selected
}
) } const AddAccount = () => { const router = useRouter() return (
{ router.push({ pathname: '/login', query: { callbackUrl: window.location.origin + router.asPath, multiAuth: true } }) }} />
+ add account
) } export default function SwitchAccountDialog () { const { accounts } = useAccounts() return ( <>

Switch Account

{ accounts.map((account) => ) }
) }