diff --git a/common/user.ts b/common/user.ts index e3c9d181..b130be02 100644 --- a/common/user.ts +++ b/common/user.ts @@ -63,6 +63,10 @@ export type PrivateUser = { initialIpAddress?: string apiKey?: string notificationPreferences?: notification_subscribe_types + twitchInfo?: { + twitchName: string + controlToken: string + } } export type notification_subscribe_types = 'all' | 'less' | 'none' diff --git a/firestore.rules b/firestore.rules index fe45071b..e3514deb 100644 --- a/firestore.rules +++ b/firestore.rules @@ -70,7 +70,7 @@ service cloud.firestore { allow read: if userId == request.auth.uid || isAdmin(); allow update: if (userId == request.auth.uid || isAdmin()) && request.resource.data.diff(resource.data).affectedKeys() - .hasOnly(['apiKey', 'unsubscribedFromResolutionEmails', 'unsubscribedFromCommentEmails', 'unsubscribedFromAnswerEmails', 'notificationPreferences', 'unsubscribedFromWeeklyTrendingEmails' ]); + .hasOnly(['apiKey', 'twitchInfo', 'unsubscribedFromResolutionEmails', 'unsubscribedFromCommentEmails', 'unsubscribedFromAnswerEmails', 'notificationPreferences', 'unsubscribedFromWeeklyTrendingEmails' ]); } match /private-users/{userId}/views/{viewId} { diff --git a/web/components/profile/twitch-panel.tsx b/web/components/profile/twitch-panel.tsx new file mode 100644 index 00000000..8415a06e --- /dev/null +++ b/web/components/profile/twitch-panel.tsx @@ -0,0 +1,96 @@ +import clsx from 'clsx' +import React, { useState } from 'react' +import toast from 'react-hot-toast' + +import { copyToClipboard } from 'web/lib/util/copy' +import { linkTwitchAccount } from 'web/lib/twitch/link-twitch-account' +import { LinkIcon } from '@heroicons/react/solid' +import { track } from 'web/lib/service/analytics' +import { Button } from './../button' +import { LoadingIndicator } from './../loading-indicator' +import { Row } from './../layout/row' +import { usePrivateUser, useUser } from 'web/hooks/use-user' + +export function TwitchPanel() { + const user = useUser() + const privateUser = usePrivateUser() + + const twitchName = privateUser?.twitchInfo?.twitchName + const twitchToken = privateUser?.twitchInfo?.controlToken + + const linkIcon =