import { z } from "zod/v4"; import { useForm } from "@mantine/form"; import { zod4Resolver } from "mantine-form-zod-resolver"; import { Container, Title, TextInput, Button, Box, Text, Anchor, Divider, } from "@mantine/core"; import classes from "../../features/auth/components/auth.module.css"; import { getCheckHostname } from "@/features/workspace/services/workspace-service.ts"; import { useState } from "react"; import { getSubdomainHost } from "@/lib/config.ts"; import { Link } from "react-router-dom"; import APP_ROUTE from "@/lib/app-route.ts"; import { useTranslation } from "react-i18next"; import JoinedWorkspaces from "@/ee/components/joined-workspaces.tsx"; import { useJoinedWorkspacesQuery } from "@/ee/cloud/query/cloud-query.ts"; import { findWorkspacesByEmail } from "@/ee/cloud/service/cloud-service.ts"; const formSchema = z.object({ hostname: z.string().min(1, { message: "subdomain is required" }), }); const findWorkspaceSchema = z.object({ email: z.string().email({ message: "Please enter a valid email" }), }); export function CloudLoginForm() { const { t } = useTranslation(); const [isLoading, setIsLoading] = useState(false); const [isFindLoading, setIsFindLoading] = useState(false); const [findEmailSent, setFindEmailSent] = useState(false); const { data: joinedWorkspaces } = useJoinedWorkspacesQuery(); const form = useForm({ validate: zod4Resolver(formSchema), initialValues: { hostname: "", }, }); const findForm = useForm({ validate: zod4Resolver(findWorkspaceSchema), initialValues: { email: "", }, }); async function onSubmit(data: { hostname: string }) { setIsLoading(true); try { const checkHostname = await getCheckHostname(data.hostname); window.location.href = checkHostname.hostname; } catch (err) { if (err?.status === 404) { form.setFieldError("hostname", "We could not find this workspace"); } else { form.setFieldError("hostname", "An error occurred"); } } setIsLoading(false); } async function onFindSubmit(data: { email: string }) { setIsFindLoading(true); try { await findWorkspacesByEmail(data.email); setFindEmailSent(true); } catch { findForm.setFieldError("email", "An error occurred. Please try again."); } setIsFindLoading(false); } return (
{t("Login")} {joinedWorkspaces?.length > 0 && ( )}
.{getSubdomainHost()}} rightSectionWidth={150} withErrorStyles={false} {...form.getInputProps("hostname")} /> {findEmailSent ? ( {t("We've sent you an email with your associated workspaces.")} ) : (
{t("Find your workspaces")} )}
{t("Don't have a workspace?")}{" "} {t("Create new workspace")}
); }