import clsx from 'clsx' import React, { useState } from 'react' import toast from 'react-hot-toast' import { copyToClipboard } from 'web/lib/util/copy' import { initLinkTwitchAccount } from 'web/lib/twitch/link-twitch-account' import { LinkIcon } from '@heroicons/react/solid' import { User, PrivateUser } from 'common/user' export function TwitchPanel(props: { auth: { user: User; privateUser: PrivateUser } }) { const { user, privateUser } = props.auth const [twitchToken, setTwitchToken] = useState('') const [twitchLoading, setTwitchLoading] = useState(false) const [twitchLinkError, setTwitchLinkError] = useState('') const [controlToken, setControlToken] = useState( undefined ) const linkTwitchAccount = async () => { if (!privateUser.apiKey) return // TODO: handle missing API key try { setTwitchLoading(true) const [twitchAuthURL, linkSuccessPromise] = await initLinkTwitchAccount( privateUser.id, privateUser.apiKey ) window.open(twitchAuthURL) const data = await linkSuccessPromise setTwitchToken(data.twitchName) setControlToken(data.controlToken) } catch (e) { console.error(e) toast.error('Failed to link Twitch account: ' + (e as Object).toString()) } finally { setTwitchLoading(false) } } const linkIcon =