"use client"; import { useParams } from "next/navigation"; import { useFormContext } from "react-hook-form"; import { z } from "zod"; import LicenseRequired from "~/ee/common/components/LicenseRequired"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { trpc } from "@calcom/trpc/react"; import { Button } from "@calcom/ui/components/button"; import { showToast } from "@calcom/ui/components/toast"; import { revalidateAttributesList } from "@calcom/web/app/(use-page-wrapper)/settings/organizations/(org-user-only)/members/actions"; import { AttributeForm } from "./AttributesForm"; const CreateAttributeSchema = z.object({ // Calling this name would make sense but conflicts with rhf "watch" "name" field attrName: z.string().min(1), type: z.enum(["TEXT", "NUMBER", "SINGLE_SELECT", "MULTI_SELECT"]), options: z.array(z.object({ value: z.string(), id: z.string() })), }); type FormValues = z.infer; function CreateAttributesPage() { const utils = trpc.useUtils(); const { t } = useLocale(); // Get the attribute id from the url const params = useParams<{ id: string }>(); const id = params?.id || ""; // ensure string with zod const attribute = trpc.viewer.attributes.get.useQuery({ id }); const mutation = trpc.viewer.attributes.edit.useMutation({ onSuccess: () => { showToast(t("attribute_edited_successfully"), "success"); utils.viewer.attributes.get.invalidate({ id, }); utils.viewer.attributes.list.invalidate(); revalidateAttributesList(); }, onError: (err) => { showToast(err.message, "error"); }, }); return ( <> {!attribute.isLoading && attribute.data ? ( } onSubmit={(values) => { const { attrName, ...rest } = values; mutation.mutate({ ...rest, name: attrName, attributeId: id, }); }} /> ) : ( <>Loading )} ); } function EditAttributeHeader(props: { isPending: boolean }) { const { t } = useLocale(); const formContext = useFormContext(); const watchedTitle = formContext.watch("attrName"); return ( <>

{t("attribute")}

{watchedTitle && ( <> / {watchedTitle} )}
); } export default CreateAttributesPage;