From c7cbc1b9948fbf7b16ff65dfeb48ded0c246dbed Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 2 Mar 2022 07:03:19 -0500 Subject: [PATCH] Twitch username --- .../twitch_oauth/CheckTwitchOauth.ts | 2 ++ .../src/urls/StorytellerUrlConfig.ts | 4 +++ .../src/pages/obs_configs/ObsConfigsPage.tsx | 35 +++++++++++++++++-- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/packages/components/src/api/storyteller/twitch_oauth/CheckTwitchOauth.ts b/packages/components/src/api/storyteller/twitch_oauth/CheckTwitchOauth.ts index aa6a19718f..12dc688831 100644 --- a/packages/components/src/api/storyteller/twitch_oauth/CheckTwitchOauth.ts +++ b/packages/components/src/api/storyteller/twitch_oauth/CheckTwitchOauth.ts @@ -3,6 +3,8 @@ import { ApiConfig } from "../../ApiConfig"; export interface CheckTwitchOauthSuccessResponse { success: boolean, oauth_token_found: boolean, + maybe_twitch_username?: string, + maybe_twitch_username_lowercase?: string, } export interface CheckTwitchOauthErrorResponse { diff --git a/packages/components/src/urls/StorytellerUrlConfig.ts b/packages/components/src/urls/StorytellerUrlConfig.ts index 2ad0eea037..951a8222ae 100644 --- a/packages/components/src/urls/StorytellerUrlConfig.ts +++ b/packages/components/src/urls/StorytellerUrlConfig.ts @@ -28,6 +28,10 @@ export class StorytellerUrlConfig { return `${this.getScheme()}://${this.getApiHost()}/twitch/oauth/enroll_redirect_begin`; } + obsPageFortwitch(twitchUsername: string) : string { + return `${this.getScheme()}://${this.getObsHost()}/twitch/${twitchUsername}`; + } + // =============== API HOSTS =============== private getApiHost() : string { diff --git a/packages/storyteller/src/pages/obs_configs/ObsConfigsPage.tsx b/packages/storyteller/src/pages/obs_configs/ObsConfigsPage.tsx index 141df4ab06..7c071ee416 100644 --- a/packages/storyteller/src/pages/obs_configs/ObsConfigsPage.tsx +++ b/packages/storyteller/src/pages/obs_configs/ObsConfigsPage.tsx @@ -1,19 +1,39 @@ -import React from 'react'; +import React, { useCallback, useEffect, useState } from 'react'; import { SessionWrapper } from '@storyteller/components/src/session/SessionWrapper'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faDiscord } from '@fortawesome/free-brands-svg-icons'; +import { CheckTwitchOauth, CheckTwitchOauthIsError, CheckTwitchOauthIsOk } from '@storyteller/components/src/api/storyteller/twitch_oauth/CheckTwitchOauth'; +import { StorytellerUrlConfig } from '@storyteller/components/src/urls/StorytellerUrlConfig'; +import { faArrowAltCircleUp, faExternalLinkAlt } from '@fortawesome/free-solid-svg-icons'; interface Props { sessionWrapper: SessionWrapper, } function ObsConfigsPage(props: Props) { + const [maybeTwitchUsername, setMaybeTwitchUsername] = useState(""); + + const checkTwitchOauth = useCallback(async () => { + const result = await CheckTwitchOauth(); + + if (CheckTwitchOauthIsOk(result)) { + setMaybeTwitchUsername(result.maybe_twitch_username || ""); + } else if (CheckTwitchOauthIsError(result)) { + } + }, []); + + useEffect(() => { + checkTwitchOauth(); + }, []) + if (!props.sessionWrapper.isLoggedIn()) { return

Must Log In

; } - const obsUrl = 'https://obs.storyteller.io/twitch/YOUR_USERNAME'; + const username = !!maybeTwitchUsername ? maybeTwitchUsername : 'YOUR_USERNAME'; + + const obsUrl = new StorytellerUrlConfig().obsPageFortwitch(username); return (
@@ -61,6 +81,17 @@ function ObsConfigsPage(props: Props) {
+ + Open In New Tab  + + +
+

This page is a work in progress! It will include instructions, more configs, etc.