import { useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import slugify from "@calcom/lib/slugify"; import type { RouterOutputs } from "@calcom/trpc/react"; import { trpc } from "@calcom/trpc/react"; import { Alert, Button, DialogFooter, Form, TextField } from "@calcom/ui"; import { useOrgBranding } from "../../organizations/context/provider"; import { subdomainSuffix } from "../../organizations/lib/orgDomains"; import type { NewTeamFormValues } from "../lib/types"; interface CreateANewTeamFormProps { onCancel: () => void; submitLabel: string; onSuccess: (data: RouterOutputs["viewer"]["teams"]["create"]) => void; inDialog?: boolean; slug?: string; } export const CreateANewTeamForm = (props: CreateANewTeamFormProps) => { const { inDialog, onCancel, slug, submitLabel, onSuccess } = props; const { t, isLocaleReady } = useLocale(); const [serverErrorMessage, setServerErrorMessage] = useState(null); const orgBranding = useOrgBranding(); const newTeamFormMethods = useForm({ defaultValues: { slug, }, }); const createTeamMutation = trpc.viewer.teams.create.useMutation({ onSuccess: (data) => onSuccess(data), onError: (err) => { if (err.message === "team_url_taken") { newTeamFormMethods.setError("slug", { type: "custom", message: t("url_taken") }); } else { setServerErrorMessage(err.message); } }, }); const FormButtons = () => ( <> ); return ( <>
{ if (!createTeamMutation.isPending) { setServerErrorMessage(null); createTeamMutation.mutate(v); } }}>
{serverErrorMessage && (
)} ( <> { newTeamFormMethods.setValue("name", e?.target.value); if (newTeamFormMethods.formState.touchedFields["slug"] === undefined) { newTeamFormMethods.setValue("slug", slugify(e?.target.value)); } }} autoComplete="off" data-testid="team-name" /> )} />
( { newTeamFormMethods.setValue("slug", slugify(e?.target.value, true), { shouldTouch: true, }); newTeamFormMethods.clearErrors("slug"); }} /> )} />
{inDialog ? (
) : (
)}
); };