diff --git a/packages/components/src/api/beta_key/CreateBetaKey.ts b/packages/components/src/api/beta_key/CreateBetaKey.ts new file mode 100644 index 0000000000..6a7e8ff02f --- /dev/null +++ b/packages/components/src/api/beta_key/CreateBetaKey.ts @@ -0,0 +1,22 @@ +import MakeRequest from "../MakeRequest"; + +export interface CreateBetaKeyRequest { + maybe_referrer_username: string; + number_of_keys: number; + uuid_idempotency_token: string; +} + +export interface CreateBetaKeyResponse { + beta_keys: string[]; + success: boolean; +} + +export const CreateBetaKey = MakeRequest< + string, + CreateBetaKeyRequest, + CreateBetaKeyResponse, + {} +>({ + method: "POST", + routingFunction: () => "/v1/beta_keys/new", +}); diff --git a/packages/fakeyou.com/src/components/layout/PageHeader/PageHeader.tsx b/packages/fakeyou.com/src/components/layout/PageHeader/PageHeader.tsx index f384c77af7..0d93d9f316 100644 --- a/packages/fakeyou.com/src/components/layout/PageHeader/PageHeader.tsx +++ b/packages/fakeyou.com/src/components/layout/PageHeader/PageHeader.tsx @@ -116,7 +116,10 @@ export default function PageHeader({ >
{titleH2 ? ( -

{title}

+

+ {icon} + {title} +

) : (

{icon} diff --git a/packages/fakeyou.com/src/scss/site-refresh.scss b/packages/fakeyou.com/src/scss/site-refresh.scss index b4db175f82..0c9ed0db47 100644 --- a/packages/fakeyou.com/src/scss/site-refresh.scss +++ b/packages/fakeyou.com/src/scss/site-refresh.scss @@ -244,6 +244,10 @@ styles with important tags: padding-left: var(--bs-gutter-x, 1rem); } + .narrow-container { + max-width: 900px !important; + } + .py-6 { padding-top: 1.6rem !important; padding-bottom: 0.4rem !important; diff --git a/packages/fakeyou.com/src/v2/view/PageContainer.tsx b/packages/fakeyou.com/src/v2/view/PageContainer.tsx index ba8ec2fd30..04e89c44ab 100644 --- a/packages/fakeyou.com/src/v2/view/PageContainer.tsx +++ b/packages/fakeyou.com/src/v2/view/PageContainer.tsx @@ -135,6 +135,7 @@ import DashboardPage from "./pages/dashboard/DashboardPage"; import DevUploadAlt from "./pages/dev_upload/DevUploadAlt"; import { ModerationTokenInfoPage } from "./pages/moderation/ModerationTokenInfoPage"; import StyleVideo from "./pages/style-video"; +import CreateBetaKeyPage from "./pages/beta_key/CreateBetaKeyPage"; interface Props { sessionWrapper: SessionWrapper; @@ -1124,6 +1125,10 @@ class PageContainer extends React.Component< /> + + + + {/* // // (null); + const [alertType, setAlertType] = useState<"success" | "danger" | null>(null); + const [generatedKeys, setGeneratedKeys] = useState([]); + const [loading, setLoading] = useState(false); + const { canBanUsers } = useSession(); + + const getUser = useCallback(async (username: string) => { + const response = await GetUserByUsername(username); + if (GetUserByUsernameIsOk(response)) { + return true; + } else if (GetUserByUsernameIsErr(response)) { + switch (response) { + case UserLookupError.NotFound: + setAlertMessage("Failed to create beta key(s). Username not found."); + setAlertType("danger"); + setGeneratedKeys([]); + break; + default: + setAlertMessage("Failed to create beta key(s). Username not found."); + setAlertType("danger"); + setGeneratedKeys([]); + break; + } + return false; + } + }, []); + + const handleCreateBetaKey = async () => { + try { + setLoading(true); + const userExists = await getUser(username); + if (!userExists) { + setLoading(false); + return; + } + + const response = await CreateBetaKey("", { + maybe_referrer_username: username, + number_of_keys: numberOfKeys, + uuid_idempotency_token: uuidv4(), + }); + + if (response.success) { + setAlertMessage( + `Successfully created ${response.beta_keys.length} beta key(s):` + ); + setAlertType("success"); + setGeneratedKeys(response.beta_keys); + } else { + setAlertMessage("Failed to create beta key(s)."); + setAlertType("danger"); + setGeneratedKeys([]); + } + } catch (error) { + console.error("Error creating beta keys:", error); + setAlertMessage("An error occurred while creating beta key(s)."); + setAlertType("danger"); + setGeneratedKeys([]); + } finally { + setLoading(false); + } + }; + + if (!canBanUsers()) { + return ( + + + + ); + } + + return ( + + + +
+ setUsername(e.target.value)} + required={true} + /> + setNumberOfKeys(Number(e.target.value))} + defaultValue={1} + required={true} + /> +
+
+
+
+ + {alertMessage && ( +
+ {alertMessage} + {generatedKeys.length > 0 && ( +
+
    + {generatedKeys.map((key, index) => ( +
  • {key}
  • + ))} +
+
+ )} +
+ )} +
+ ); +}