diff --git a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/serper-api/page.tsx b/surfsense_web/app/dashboard/[search_space_id]/connectors/add/serper-api/page.tsx deleted file mode 100644 index 69a0c2b81..000000000 --- a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/serper-api/page.tsx +++ /dev/null @@ -1,219 +0,0 @@ -"use client"; - -import { zodResolver } from "@hookform/resolvers/zod"; -import { useAtomValue } from "jotai"; -import { ArrowLeft, Check, Info, Loader2 } from "lucide-react"; -import { motion } from "motion/react"; -import { useParams, useRouter } from "next/navigation"; -import { useState } from "react"; -import { useForm } from "react-hook-form"; -import { toast } from "sonner"; -import * as z from "zod"; -import { createConnectorMutationAtom } from "@/atoms/connectors/connector-mutation.atoms"; -import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; -import { Button } from "@/components/ui/button"; -import { - Card, - CardContent, - CardDescription, - CardFooter, - CardHeader, - CardTitle, -} from "@/components/ui/card"; -import { - Form, - FormControl, - FormDescription, - FormField, - FormItem, - FormLabel, - FormMessage, -} from "@/components/ui/form"; -import { Input } from "@/components/ui/input"; -import { EnumConnectorName } from "@/contracts/enums/connector"; -import { getConnectorIcon } from "@/contracts/enums/connectorIcons"; - -// Define the form schema with Zod -const serperApiFormSchema = z.object({ - name: z.string().min(3, { - message: "Connector name must be at least 3 characters.", - }), - api_key: z.string().min(10, { - message: "API key is required and must be valid.", - }), -}); - -// Define the type for the form values -type SerperApiFormValues = z.infer; - -export default function SerperApiPage() { - const router = useRouter(); - const params = useParams(); - const searchSpaceId = params.search_space_id as string; - const [isSubmitting, setIsSubmitting] = useState(false); - const { mutateAsync: createConnector } = useAtomValue(createConnectorMutationAtom); - - // Initialize the form - const form = useForm({ - resolver: zodResolver(serperApiFormSchema), - defaultValues: { - name: "Serper API Connector", - api_key: "", - }, - }); - - // Handle form submission - const onSubmit = async (values: SerperApiFormValues) => { - setIsSubmitting(true); - try { - await createConnector({ - data: { - name: values.name, - connector_type: EnumConnectorName.SERPER_API, - config: { - SERPER_API_KEY: values.api_key, - }, - is_indexable: false, - last_indexed_at: null, - periodic_indexing_enabled: false, - indexing_frequency_minutes: null, - next_scheduled_at: null, - }, - queryParams: { - search_space_id: searchSpaceId, - }, - }); - - toast.success("Serper API connector created successfully!"); - - // Navigate back to connectors page - router.push(`/dashboard/${searchSpaceId}/connectors`); - } catch (error) { - console.error("Error creating connector:", error); - toast.error(error instanceof Error ? error.message : "Failed to create connector"); - } finally { - setIsSubmitting(false); - } - }; - - return ( -
- - - {/* Header */} -
-
-
- {getConnectorIcon(EnumConnectorName.SERPER_API, "h-6 w-6")} -
-
-

Connect Serper API

-

- Connect Serper API for Google search capabilities. -

-
-
-
- - - - - Connect Serper API - - Integrate with Serper API to enhance your search capabilities with Google search - results. - - - - - - API Key Required - - You'll need a Serper API key to use this connector. You can get one by signing up at{" "} - - serper.dev - - - - -
- - ( - - Connector Name - - - - A friendly name to identify this connector. - - - )} - /> - - ( - - Serper API Key - - - - - Your API key will be encrypted and stored securely. - - - - )} - /> - -
- -
- - -
- -

What you get with Serper API:

-
    -
  • Access to Google search results directly in your research
  • -
  • Real-time information from the web
  • -
  • Enhanced search capabilities for your projects
  • -
-
-
-
-
- ); -} diff --git a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/webcrawler-connector/page.tsx b/surfsense_web/app/dashboard/[search_space_id]/connectors/add/webcrawler-connector/page.tsx index f99c66142..4a63244b8 100644 --- a/surfsense_web/app/dashboard/[search_space_id]/connectors/add/webcrawler-connector/page.tsx +++ b/surfsense_web/app/dashboard/[search_space_id]/connectors/add/webcrawler-connector/page.tsx @@ -34,6 +34,7 @@ import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; import { EnumConnectorName } from "@/contracts/enums/connector"; import { getConnectorIcon } from "@/contracts/enums/connectorIcons"; +import { SearchSourceConnector } from "@/contracts/types/connector.types"; // Define the form schema with Zod const webcrawlerConnectorFormSchema = z.object({ @@ -54,7 +55,7 @@ export default function WebcrawlerConnectorPage() { const [isSubmitting, setIsSubmitting] = useState(false); const [doesConnectorExist, setDoesConnectorExist] = useState(false); - const { data: connectors } = useAtomValue(connectorsAtom); + const { refetch : fetchConnectors } = useAtomValue(connectorsAtom); const { mutateAsync: createConnector } = useAtomValue(createConnectorMutationAtom); // Initialize the form @@ -68,15 +69,16 @@ export default function WebcrawlerConnectorPage() { }); useEffect(() => { - if (connectors) { + fetchConnectors().then((data) => { + const connectors = data.data || []; const connector = connectors.find( - (c) => c.connector_type === EnumConnectorName.WEBCRAWLER_CONNECTOR + (c: SearchSourceConnector) => c.connector_type === EnumConnectorName.WEBCRAWLER_CONNECTOR ); if (connector) { setDoesConnectorExist(true); } - } - }, [connectors]); + }); + }, []); // Handle form submission const onSubmit = async (values: WebcrawlerConnectorFormValues) => {