import { useState, useEffect, useCallback } from 'react' import { DocTree } from './DocTree' import { DocContent } from './DocContent' import { parseMarkdown, buildFileTree } from '@/lib/parser' import type { DocFile, ParsedDoc } from '@/lib/types' import { docs } from '@/data/docs' const DOCS_FILES: Record = docs export const ApiDocViewer = () => { const [fileTree, setFileTree] = useState([]) const [selectedPath, setSelectedPath] = useState() const [currentDoc, setCurrentDoc] = useState(null) useEffect(() => { const files = Object.keys(DOCS_FILES) const basePath = '/docs' const tree = buildFileTree(files, basePath) setFileTree(tree) if (files.length > 0) { setSelectedPath(files[0]) } }, []) useEffect(() => { if (selectedPath) { const content = DOCS_FILES[selectedPath] if (content) { const parsed = parseMarkdown(content) setCurrentDoc(parsed) } } }, [selectedPath]) const handleSelect = useCallback((file: DocFile) => { if (!file.isDir) { setSelectedPath(file.relativePath) } }, []) const handleReferenceClick = useCallback((ref: string) => { const normalizedRef = ref.replace('.md', '') const allFiles = Object.keys(DOCS_FILES).map(k => k.replace('/docs/', '')) const match = allFiles.find(f => f.replace('.md', '') === normalizedRef) if (match) { setSelectedPath(match) } }, []) return (
) }