import { Button } from "@/components/ui/button"; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Switch } from "@/components/ui/switch"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; import { maximFormSchema, type MaximFormSchema } from "@/lib/types/schemas"; import { RbacOperation, RbacResource, useRbac } from "@enterprise/lib"; import { zodResolver } from "@hookform/resolvers/zod"; import { Eye, EyeOff, Trash2 } from "lucide-react"; import { useEffect, useState } from "react"; import { useForm, type Resolver } from "react-hook-form"; interface MaximFormFragmentProps { initialConfig?: { enabled?: boolean; api_key?: string; log_repo_id?: string; }; onSave: (config: MaximFormSchema) => Promise; onDelete?: () => void; isDeleting?: boolean; isLoading?: boolean; } export function MaximFormFragment({ initialConfig, onSave, onDelete, isDeleting = false, isLoading = false }: MaximFormFragmentProps) { const hasMaximAccess = useRbac(RbacResource.Observability, RbacOperation.Update); const [showApiKey, setShowApiKey] = useState(false); const [isSaving, setIsSaving] = useState(false); const form = useForm({ resolver: zodResolver(maximFormSchema) as Resolver, mode: "onChange", reValidateMode: "onChange", defaultValues: { enabled: initialConfig?.enabled ?? true, maxim_config: { api_key: initialConfig?.api_key ?? "", log_repo_id: initialConfig?.log_repo_id ?? "", }, }, }); const onSubmit = (data: MaximFormSchema) => { setIsSaving(true); onSave(data).finally(() => setIsSaving(false)); }; useEffect(() => { // Reset form with new initial config when it changes form.reset({ enabled: initialConfig?.enabled ?? true, maxim_config: { api_key: initialConfig?.api_key ?? "", log_repo_id: initialConfig?.log_repo_id ?? "", }, }); }, [form, initialConfig]); return (
( API Key
)} /> ( Log Repository ID (Optional) )} />
{/* Form Actions */}
( Enabled )} />
{onDelete && ( )} {(!form.formState.isDirty || !form.formState.isValid) && (

{!form.formState.isDirty && !form.formState.isValid ? "No changes made and validation errors present" : !form.formState.isDirty ? "No changes made" : "Please fix validation errors"}

)}
); }