'use client'; import { updateOrgName } from "@/actions"; import { useToast } from "@/components/hooks/use-toast"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import useCaptureEvent from "@/hooks/useCaptureEvent"; import { useDomain } from "@/hooks/useDomain"; import { orgNameSchema } from "@/lib/schemas"; import { isServiceError } from "@/lib/utils"; import { zodResolver } from "@hookform/resolvers/zod"; import { OrgRole } from "@sourcebot/db"; import { Loader2 } from "lucide-react"; import { useRouter } from "next/navigation"; import { useCallback } from "react"; import { useForm } from "react-hook-form"; import * as z from "zod"; const formSchema = z.object({ name: orgNameSchema, }) interface ChangeOrgNameCardProps { currentUserRole: OrgRole, orgName: string, } export function ChangeOrgNameCard({ orgName, currentUserRole }: ChangeOrgNameCardProps) { const domain = useDomain() const { toast } = useToast() const captureEvent = useCaptureEvent(); const router = useRouter(); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { name: orgName, }, }) const { isSubmitting } = form.formState; const onSubmit = useCallback(async (data: z.infer) => { const result = await updateOrgName(data.name, domain); if (isServiceError(result)) { toast({ description: `❌ Failed to update organization name. Reason: ${result.message}`, }) captureEvent('wa_org_name_updated_fail', { error: result.errorCode, }); } else { toast({ description: "✅ Organization name updated successfully", }); captureEvent('wa_org_name_updated_success', {}); router.refresh(); } }, [domain, router, toast, captureEvent]); return ( Organization Name {`Your organization's visible name within Sourceobot. For example, the name of your company or department.`}
( )} />
) }