feat: add web search test button in admin tools, update Resend docs
Some checks failed
Deploy to Production / Build and Deploy (push) Failing after 30s

Made-with: Cursor
This commit is contained in:
2026-04-25 23:59:10 +02:00
parent 3fe69b65a5
commit ffd6fb9373
3 changed files with 140 additions and 11 deletions

View File

@@ -42,6 +42,8 @@ export function AdminSettingsForm({ config }: { config: Record<string, string> }
// Email provider state
const [emailProvider, setEmailProvider] = useState<'resend' | 'smtp'>(config.EMAIL_PROVIDER as 'resend' | 'smtp' || (config.RESEND_API_KEY ? 'resend' : 'smtp'))
const [emailTestResult, setEmailTestResult] = useState<{ provider: 'resend' | 'smtp'; success: boolean; message?: string } | null>(null)
const [isTestingSearch, setIsTestingSearch] = useState(false)
const [searchTestResult, setSearchTestResult] = useState<{ success: boolean; message: string } | null>(null)
// AI Provider state - separated for tags, embeddings, and chat
const [tagsProvider, setTagsProvider] = useState<AIProvider>((config.AI_PROVIDER_TAGS as AIProvider) || 'ollama')
@@ -308,6 +310,28 @@ export function AdminSettingsForm({ config }: { config: Record<string, string> }
}
}
const handleTestSearch = async () => {
setIsTestingSearch(true)
setSearchTestResult(null)
try {
const url = (document.getElementById('SEARXNG_URL') as HTMLInputElement)?.value
|| config.SEARXNG_URL || 'http://localhost:8080'
const apiKey = (document.getElementById('BRAVE_SEARCH_API_KEY') as HTMLInputElement)?.value
|| config.BRAVE_SEARCH_API_KEY || ''
const res = await fetch('/api/admin/test-search', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ provider: webSearchProvider, searxngUrl: url, braveApiKey: apiKey }),
})
const data = await res.json()
setSearchTestResult(data)
} catch (e: any) {
setSearchTestResult({ success: false, message: e.message })
} finally {
setIsTestingSearch(false)
}
}
const handleSaveTools = async (formData: FormData) => {
setIsSaving(true)
const data = {
@@ -1064,9 +1088,25 @@ export function AdminSettingsForm({ config }: { config: Record<string, string> }
<Input id="JINA_API_KEY" name="JINA_API_KEY" type="password" defaultValue={config.JINA_API_KEY || ''} placeholder={t('admin.tools.jinaKeyOptional')} />
<p className="text-xs text-muted-foreground">{t('admin.tools.jinaKeyDescription')}</p>
</div>
{/* Résultat du test */}
{searchTestResult && (
<div className={`rounded-lg border p-3 text-sm flex items-start gap-2 ${searchTestResult.success ? 'border-green-200 bg-green-50 text-green-800 dark:border-green-800 dark:bg-green-950/30 dark:text-green-300' : 'border-red-200 bg-red-50 text-red-800 dark:border-red-800 dark:bg-red-950/30 dark:text-red-300'}`}>
<span className={`mt-0.5 inline-block w-2 h-2 rounded-full flex-shrink-0 ${searchTestResult.success ? 'bg-green-500' : 'bg-red-500'}`} />
<span>{searchTestResult.message}</span>
</div>
)}
</CardContent>
<CardFooter>
<CardFooter className="flex justify-between">
<Button type="submit" disabled={isSaving}>{t('admin.tools.saveSettings')}</Button>
<Button
type="button"
variant="secondary"
onClick={handleTestSearch}
disabled={isTestingSearch}
>
{isTestingSearch ? 'Test en cours…' : 'Tester la recherche web'}
</Button>
</CardFooter>
</form>
</Card>