"use client"; import { zodResolver } from "@hookform/resolvers/zod"; import { Icon } from "@iconify/react"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; import * as z from "zod"; import { getTenantConfig, updateTenantConfig, } from "@/actions/lighthouse/lighthouse"; import { SaveIcon } from "@/components/icons"; import { Button, Card, CardContent, CardHeader, CardTitle, } from "@/components/shadcn"; import { useToast } from "@/components/ui"; import { CustomTextarea } from "@/components/ui/custom"; import { Form } from "@/components/ui/form"; const lighthouseSettingsSchema = z.object({ businessContext: z .string() .max(1000, "Business context cannot exceed 1000 characters") .optional(), }); type FormValues = z.infer; export const LighthouseSettings = () => { const { toast } = useToast(); const [isLoading, setIsLoading] = useState(false); const [isFetchingData, setIsFetchingData] = useState(true); const form = useForm({ resolver: zodResolver(lighthouseSettingsSchema), defaultValues: { businessContext: "", }, mode: "onChange", }); // Fetch initial data useEffect(() => { const fetchData = async () => { setIsFetchingData(true); try { // Fetch tenant config const configResult = await getTenantConfig(); if (configResult.data && !configResult.errors) { const config = configResult.data.attributes; form.reset({ businessContext: config?.business_context || "", }); } } catch (error) { console.error("Failed to fetch settings:", error); } finally { setIsFetchingData(false); } }; fetchData(); }, [form]); const onSubmit = async (data: FormValues) => { if (isLoading) return; setIsLoading(true); try { const config: Record = { business_context: data.businessContext || "", }; const result = await updateTenantConfig(config); if (result.errors) { const errorMessage = result.errors[0]?.detail || "Failed to save settings"; toast({ title: "Error", description: errorMessage, variant: "destructive", }); } else { toast({ title: "Success", description: "Lighthouse settings saved successfully", }); } } catch (error) { toast({ title: "Error", description: "Failed to save Lighthouse settings: " + String(error), variant: "destructive", }); } finally { setIsLoading(false); } }; if (isFetchingData) { return ( Settings
); } return ( Settings
); };