diff --git a/packages/components/src/api/beta_key/CreateBetaKey.ts b/packages/components/src/api/beta_key/CreateBetaKey.ts index 6a7e8ff02f..7657058333 100644 --- a/packages/components/src/api/beta_key/CreateBetaKey.ts +++ b/packages/components/src/api/beta_key/CreateBetaKey.ts @@ -18,5 +18,5 @@ export const CreateBetaKey = MakeRequest< {} >({ method: "POST", - routingFunction: () => "/v1/beta_keys/new", + routingFunction: () => "/v1/beta_keys/create", }); diff --git a/packages/components/src/api/beta_key/RedeemBetaKey.ts b/packages/components/src/api/beta_key/RedeemBetaKey.ts new file mode 100644 index 0000000000..ba173993e4 --- /dev/null +++ b/packages/components/src/api/beta_key/RedeemBetaKey.ts @@ -0,0 +1,19 @@ +import MakeRequest from "../MakeRequest"; + +export interface RedeemBetaKeyRequest { + beta_key: string; +} + +export interface RedeemBetaKeyResponse { + success: boolean; +} + +export const RedeemBetaKey = MakeRequest< + string, + RedeemBetaKeyRequest, + RedeemBetaKeyResponse, + {} +>({ + method: "POST", + routingFunction: () => "/v1/beta_keys/redeem", +}); diff --git a/packages/fakeyou.com/src/components/layout/SideNav/SideNav.tsx b/packages/fakeyou.com/src/components/layout/SideNav/SideNav.tsx index ecd33c04d0..e4fbb727b9 100644 --- a/packages/fakeyou.com/src/components/layout/SideNav/SideNav.tsx +++ b/packages/fakeyou.com/src/components/layout/SideNav/SideNav.tsx @@ -31,7 +31,10 @@ import { useInferenceJobs, useLocalize } from "hooks"; import { Logout } from "@storyteller/components/src/api/session/Logout"; import { Button } from "components/common"; import { WebUrl } from "common/WebUrl"; -import { WebsiteConfig, Website } from "@storyteller/components/src/env/GetWebsite"; +import { + WebsiteConfig, + Website, +} from "@storyteller/components/src/env/GetWebsite"; import { useDomainConfig } from "context/DomainConfigContext"; interface SideNavProps { @@ -59,6 +62,8 @@ export default function SideNav({ const isOnLoginPage = window.location.pathname.includes("/login"); const isOnSignUpPage = window.location.pathname.includes("/signup"); const isOnStudioPage = window.location.pathname.includes("/studio"); + const isOnBetaKeyRedeemPage = + window.location.pathname.includes("/beta-key/redeem"); const domain: WebsiteConfig = useDomainConfig(); let history = useHistory(); @@ -112,7 +117,8 @@ export default function SideNav({ const shouldNotShowSidebar = (!isLoggedIn && (isOnLandingPage || isOnLoginPage || isOnSignUpPage)) || isOnStudioPage || - (domain.website === Website.StorytellerAi && isOnLandingPage); + (domain.website === Website.StorytellerAi && isOnLandingPage) || + isOnBetaKeyRedeemPage; const shouldShowSidebar = windowWidth >= 992 && !shouldNotShowSidebar; const sidebarClassName = `sidebar ${ shouldShowSidebar ? "visible" : "" @@ -277,36 +283,35 @@ export default function SideNav({ {t("videoWorkflow")} -{ - //
+ + Please login or create an account to proceed with redeeming a + beta key. +
+
+ + Enter your beta key to get access to Storyteller Studio Beta. +
++ Invalid beta key! Please try again. +
+ )} + +
+ + You now have access to Storyteller Studio Beta! +
+- More mod controls will be added in the future: user roles, activity - tracking, timed bans, account bans, etc. -
-+ More mod controls will be added in the future: user roles, activity + tracking, timed bans, account bans, etc. +
+ ); } diff --git a/packages/fakeyou.com/src/v2/view/pages/signup/SignupPage.tsx b/packages/fakeyou.com/src/v2/view/pages/signup/SignupPage.tsx index 25553f96e7..daba2b2aaa 100644 --- a/packages/fakeyou.com/src/v2/view/pages/signup/SignupPage.tsx +++ b/packages/fakeyou.com/src/v2/view/pages/signup/SignupPage.tsx @@ -8,7 +8,7 @@ import { } from "@storyteller/components/src/api/user/CreateAccount"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faUser, faEnvelope, faKey } from "@fortawesome/free-solid-svg-icons"; -import { Link, useHistory } from "react-router-dom"; +import { Link, useHistory, useLocation } from "react-router-dom"; import { SessionWrapper } from "@storyteller/components/src/session/SessionWrapper"; import { Analytics } from "../../../../common/Analytics"; @@ -35,6 +35,8 @@ interface Props { function SignupPage(props: Props) { let history = useHistory(); const domain = useDomainConfig(); + let location = useLocation(); + const queryParams = new URLSearchParams(location.search); const parsedQueryString = queryString.parse(window.location.search); @@ -264,7 +266,9 @@ function SignupPage(props: Props) { return await BeginStripeCheckoutFlow(maybeInternalPlanKey); } - let redirectUrl = WebUrl.pricingPageWithReferer("signup"); + const redirectLink = queryParams.get("redirect"); + + let redirectUrl = redirectLink || WebUrl.pricingPageWithReferer("signup"); history.push(redirectUrl); return true;