"use client" import { useEffect, useState } from "react" import { ExternalLink } from "lucide-react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { useSearchSettings, useUpdateSearchSettings, } from "@/lib/api/hooks/use-contact-discovery" import type { ApiSearchProvider, ApiSearchSettings } from "@/lib/contacts/discovery-types" import { CONTACTS_MUTED_TEXT, CONTACTS_PRIMARY_BTN_CLASS, } from "@/lib/contacts-chrome-classes" import { cn } from "@/lib/utils" const BRAVE_PROVIDER_ID = "brave-default" function defaultBraveProvider(): ApiSearchProvider { return { id: BRAVE_PROVIDER_ID, name: "Brave Search", type: "brave", api_key: "", } } function normalizeDraft(raw: ApiSearchSettings | undefined): ApiSearchSettings { const providers = raw?.providers?.length ? raw.providers : [defaultBraveProvider()] const brave = providers.find((p) => p.type === "brave") ?? defaultBraveProvider() return { default_provider_id: raw?.default_provider_id || brave.id, providers: [brave], } } export function SearchProvidersPanel() { const { data: remote, isLoading } = useSearchSettings() const updateSettings = useUpdateSearchSettings() const [draft, setDraft] = useState(normalizeDraft(undefined)) const [saved, setSaved] = useState(false) useEffect(() => { if (remote) { setDraft(normalizeDraft(remote)) } }, [remote]) const brave = draft.providers[0] ?? defaultBraveProvider() function updateBrave(patch: Partial) { setDraft((prev) => { const current = prev.providers[0] ?? defaultBraveProvider() const updated = { ...current, ...patch } return { default_provider_id: updated.id, providers: [updated], } }) } async function handleSave() { await updateSettings.mutateAsync(draft) setSaved(true) setTimeout(() => setSaved(false), 2000) } if (isLoading) { return

Chargement…

} return (

Fournisseurs de recherche

Recherche web utilisée lors de l'amélioration IA des fiches contacts (profils publics, réseaux sociaux, poste, entreprise).

{brave.name} Obtenir une clé API
updateBrave({ api_key: e.target.value })} placeholder="BSA…" autoComplete="off" />

Les 5 premiers résultats web sont ajoutés au prompt LLM avec un avertissement sur les homonymes. Sans token, l'amélioration IA fonctionne sans recherche en ligne.

) }