diff --git a/apps/console/src/pages/auth/ConfirmInvitationPage.tsx b/apps/console/src/pages/auth/ConfirmInvitationPage.tsx new file mode 100644 index 000000000..236b7064b --- /dev/null +++ b/apps/console/src/pages/auth/ConfirmInvitationPage.tsx @@ -0,0 +1,120 @@ +import { Link, useNavigate } from "react-router"; +import { Button, Field, useToast } from "@probo/ui"; +import { useTranslate } from "@probo/i18n"; +import { z } from "zod"; +import { useFormWithSchema } from "/hooks/useFormWithSchema"; +import { usePageTitle } from "@probo/hooks"; +import { buildEndpoint } from "/providers/RelayProviders"; +import { useEffect } from "react"; + +const schema = z.object({ + token: z.string(), + password: z.string().min(8), +}); + +export default function ConfirmInvitationPage() { + const { __ } = useTranslate(); + const navigate = useNavigate(); + const { toast } = useToast(); + const { register, handleSubmit, formState, setValue } = useFormWithSchema( + schema, + { + defaultValues: { + token: "", + password: "", + }, + } + ); + + const onSubmit = handleSubmit(async (data) => { + const response = await fetch( + buildEndpoint("/api/console/v1/auth/invitation"), + { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + credentials: "include", + body: JSON.stringify(data), + } + ); + + // Registration failed + if (!response.ok) { + const errorData = await response.json().catch(() => ({})); + toast({ + title: __("Confirmation failed"), + description: errorData.message || __("Confirmation failed"), + variant: "error", + }); + return; + } + + toast({ + title: __("Success"), + description: __("Invitation confirmed successfully"), + variant: "success", + }); + navigate("/", { replace: true }); + }); + + usePageTitle(__("Confirm invitation")); + + useEffect(() => { + const searchParams = new URLSearchParams(location.search); + const urlToken = searchParams.get("token"); + + if (urlToken) { + setValue("token", urlToken); + } + }, [location.search, setValue]); + + return ( +
+ {__("Enter your information to create an account")} +
++ {__("Already have an account?")}{" "} + + {__("Log in here")} + +
+