"use client" import { checkIfOrgDomainExists } from "../../../actions" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Form, FormField, FormItem, FormLabel, FormControl, FormDescription, FormMessage } from "@/components/ui/form" import { isServiceError } from "@/lib/utils" import { useForm } from "react-hook-form" import { z } from "zod" import { zodResolver } from "@hookform/resolvers/zod" import logoDark from "@/public/sb_logo_dark_large.png"; import logoLight from "@/public/sb_logo_light_large.png"; import Image from "next/image"; import { useState } from "react"; const onboardingFormSchema = z.object({ name: z.string() .min(2, { message: "Organization name must be at least 3 characters long." }) .max(30, { message: "Organization name must be at most 30 characters long." }), domain: z.string() .min(2, { message: "Organization domain must be at least 3 characters long." }) .max(20, { message: "Organization domain must be at most 20 characters long." }) .regex(/^[a-z-]+$/, { message: "Domain can only contain lowercase letters and dashes.", }), }) export type OnboardingFormValues = z.infer const defaultValues: Partial = { name: "", domain: "", } interface OrgCreateFormProps { setOrgCreateData: (data: OnboardingFormValues) => void; } export function OrgCreateForm({ setOrgCreateData }: OrgCreateFormProps) { const form = useForm({ resolver: zodResolver(onboardingFormSchema), defaultValues }) const [errorMessage, setErrorMessage] = useState(null); async function submitOrgInfoForm(data: OnboardingFormValues) { const res = await checkIfOrgDomainExists(data.domain); if (isServiceError(res)) { setErrorMessage("An error occurred while checking the domain. Please try clearing your cookies and trying again."); return; } if (res) { setErrorMessage("Organization domain already exists. Please try a different one."); return; } else { setOrgCreateData(data); } } const handleNameChange = (e: React.ChangeEvent) => { const name = e.target.value const domain = name.toLowerCase().replace(/\s+/g, "-") form.setValue("domain", domain) } return (
{"Sourcebot {"Sourcebot

Let's create your organization

( Organization Name { field.onChange(e) handleNameChange(e) }} /> )} /> ( Organization Domain
.sourcebot.dev
)} /> {errorMessage &&

{errorMessage}

}
) }