diff --git a/admin-compliance/app/(sdk)/sdk/document-generator/page.tsx b/admin-compliance/app/(sdk)/sdk/document-generator/page.tsx
index 30095a0..2a3d248 100644
--- a/admin-compliance/app/(sdk)/sdk/document-generator/page.tsx
+++ b/admin-compliance/app/(sdk)/sdk/document-generator/page.tsx
@@ -312,17 +312,15 @@ function DocumentGeneratorPageInner() {
}
}, [placeholderValues, selectedDataPointsData])
- // Search handler
- const handleSearch = useCallback(async () => {
- if (!searchQuery.trim()) return
-
+ // Core search — accepts explicit params to avoid stale closure issues
+ const runSearch = useCallback(async (query: string, type?: string, lang?: string, jurisdiction?: string) => {
setIsSearching(true)
try {
const results = await searchTemplates({
- query: searchQuery,
- templateType: selectedType || undefined,
- language: selectedLanguage || undefined,
- jurisdiction: selectedJurisdiction || undefined,
+ query: query || '',
+ templateType: type || undefined,
+ language: (lang as 'de' | 'en') || undefined,
+ jurisdiction: jurisdiction || undefined,
limit: 20,
})
setSearchResults(results)
@@ -331,7 +329,12 @@ function DocumentGeneratorPageInner() {
} finally {
setIsSearching(false)
}
- }, [searchQuery, selectedType, selectedLanguage, selectedJurisdiction])
+ }, [])
+
+ // Search handler (uses current state)
+ const handleSearch = useCallback(async () => {
+ runSearch(searchQuery, selectedType, selectedLanguage, selectedJurisdiction)
+ }, [searchQuery, selectedType, selectedLanguage, selectedJurisdiction, runSearch])
// Toggle template selection
const toggleTemplate = (id: string) => {
@@ -408,25 +411,25 @@ function DocumentGeneratorPageInner() {
{/* Status Overview */}
-
Collection Status
+
Datenbank
-
+
-
Indexierte Chunks
+
Vorlagen gesamt
- {status?.stats?.points_count || 0}
+ {status?.total ?? 0}
-
Aktive Quellen
+
Veröffentlicht
- {sources.filter((s) => s.enabled).length}
+ {status?.by_status?.published ?? sources.length}
-
Ausgewaehlt
+
Ausgewählt
{selectedTemplates.length}
@@ -503,10 +506,10 @@ function DocumentGeneratorPageInner() {
@@ -570,7 +573,7 @@ function DocumentGeneratorPageInner() {
onClick={() => {
setSearchQuery(item.query)
setSelectedType(item.type as TemplateType)
- setTimeout(handleSearch, 100)
+ runSearch(item.query, item.type)
}}
className="p-4 bg-white rounded-lg border border-gray-200 hover:border-purple-300 hover:shadow transition-all text-center"
>
diff --git a/admin-compliance/app/(sdk)/sdk/document-generator/searchTemplates.ts b/admin-compliance/app/(sdk)/sdk/document-generator/searchTemplates.ts
index 3043d1e..12e5fbc 100644
--- a/admin-compliance/app/(sdk)/sdk/document-generator/searchTemplates.ts
+++ b/admin-compliance/app/(sdk)/sdk/document-generator/searchTemplates.ts
@@ -132,10 +132,21 @@ export async function getTemplatesStatus(): Promise {
export async function getSources(): Promise {
try {
- const res = await fetch(`${TEMPLATES_API}/sources`, { signal: AbortSignal.timeout(5000) })
+ // Fetch status to get type counts for building source objects
+ const res = await fetch(`${TEMPLATES_API}/status`, { signal: AbortSignal.timeout(5000) })
if (!res.ok) return []
const data = await res.json()
- return data.sources || []
+ const byType: Record = data.by_type || {}
+ const activeTypes = Object.keys(byType).filter(k => byType[k] > 0)
+ return [
+ {
+ name: 'BreakPilot Compliance',
+ enabled: true,
+ license_type: 'mit' as const,
+ description: `${data.total || 0} selbst erstellte Vorlagen (MIT-Lizenz) — DE & EN`,
+ template_types: activeTypes,
+ },
+ ]
} catch {
return []
}