"use client"; import posthog from "posthog-js"; import { useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { useOrgBranding } from "@calcom/features/ee/organizations/context/provider"; import { subdomainSuffix } from "@calcom/features/ee/organizations/lib/orgDomains"; import type { NewTeamFormValues } from "@calcom/features/ee/teams/lib/types"; 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 } from "@calcom/ui/components/alert"; import { Button } from "@calcom/ui/components/button"; import { DialogFooter } from "@calcom/ui/components/dialog"; import { Form } from "@calcom/ui/components/form"; import { TextField } from "@calcom/ui/components/form"; import { revalidateEventTypesList } from "@calcom/web/app/(use-page-wrapper)/(main-nav)/event-types/actions"; import { revalidateTeamsList } from "@calcom/web/app/(use-page-wrapper)/(main-nav)/teams/actions"; 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 utils = trpc.useUtils(); const createTeamMutation = trpc.viewer.teams.create.useMutation({ onSuccess: async (data) => { await utils.viewer.eventTypes.getUserEventGroups.invalidate(); await revalidateEventTypesList(); await revalidateTeamsList(); 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) { posthog.capture("create_team_checkout_clicked", { team_name: v.name, team_slug: v.slug, }); setServerErrorMessage(null); createTeamMutation.mutate(v); } }}>
{serverErrorMessage && (
)} value.trim().length > 0 || t("must_enter_team_name"), }} render={({ field: { value } }) => ( <> { 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).replace(/\./g, ""), { shouldTouch: true, }); newTeamFormMethods.clearErrors("slug"); }} /> )} />
{inDialog ? (
) : (
)}
); };