"use client"; import { useEffect, useMemo, useState } from "react"; import Link from "next/link"; import { BookOpen, Cpu, Factory, FileText, StickyNote } from "lucide-react"; import SearchInput from "@/components/common/SearchInput"; import SummaryCard from "@/components/common/SummaryCard"; import { buttonVariants } from "@/components/ui/button"; import { api } from "@/lib/api"; import type { KnowledgeDevice, KnowledgeDocument, KnowledgeManufacturer, KnowledgeNote, KnowledgeSearchResult } from "@/types/knowledge"; export default function KnowledgePage() { const [manufacturers, setManufacturers] = useState([]); const [devices, setDevices] = useState([]); const [documents, setDocuments] = useState([]); const [notes, setNotes] = useState([]); const [results, setResults] = useState([]); const [query, setQuery] = useState(""); const [error, setError] = useState(""); useEffect(() => { queueMicrotask(() => { Promise.all([ api.get("/knowledge/manufacturers?limit=100"), api.get("/knowledge/devices?limit=100"), api.get("/knowledge/documents?limit=10"), api.get("/knowledge/notes?limit=10"), ]).then(([manufacturerResponse, deviceResponse, documentResponse, noteResponse]) => { setManufacturers(manufacturerResponse.data); setDevices(deviceResponse.data); setDocuments(documentResponse.data); setNotes(noteResponse.data); }).catch(() => setError("Wissensdatenbank konnte nicht geladen werden")); }); }, []); useEffect(() => { const trimmed = query.trim(); if (!trimmed) { queueMicrotask(() => setResults([])); return; } const timeout = window.setTimeout(() => { api.get(`/knowledge/search?q=${encodeURIComponent(trimmed)}`) .then((response) => setResults(response.data)) .catch(() => setResults([])); }, 250); return () => window.clearTimeout(timeout); }, [query]); const latestDocuments = useMemo(() => documents.slice(0, 5), [documents]); const latestNotes = useMemo(() => notes.slice(0, 5), [notes]); return (

Wissensdatenbank

Serviceunterlagen, Modelle, Schaltpläne und Reparaturwissen

Hersteller Geräte Dokumente Notizen
{results.length > 0 && (
{results.map((result) => ( {result.title} {result.subtitle} ))}
)} {error &&

{error}

}

Letzte Dokumente

{latestDocuments.map((document) => (

{document.title}

{document.manufacturer.name}{document.device ? ` · ${document.device.name}` : ""}

))} {latestDocuments.length === 0 &&

Noch keine Dokumente vorhanden.

}

Letzte Notizen

{latestNotes.map((note) => (

{note.title}

{note.content}

))} {latestNotes.length === 0 &&

Noch keine Notizen vorhanden.

}
); }