import { PropsWithChildren, useEffect, useMemo, useState } from 'react' import { useApp } from '../../contexts/AppContext' import { useDarkModeContext } from '../../contexts/DarkModeContext' import { openMarkdownFile, readTFileContent } from '../../utils/obsidian' import { MemoizedSyntaxHighlighterWrapper } from './SyntaxHighlighterWrapper' export default function MarkdownReferenceBlock({ filename, startLine, endLine, language, }: PropsWithChildren<{ filename: string startLine: number endLine: number language?: string }>) { const app = useApp() const { isDarkMode } = useDarkModeContext() const [blockContent, setBlockContent] = useState(null) const wrapLines = useMemo(() => { return !language || ['markdown'].includes(language) }, [language]) useEffect(() => { async function fetchBlockContent() { const file = app.vault.getFileByPath(filename) if (!file) { setBlockContent(null) return } const fileContent = await readTFileContent(file, app.vault) const content = fileContent .split('\n') .slice(startLine - 1, endLine) .join('\n') setBlockContent(content) } fetchBlockContent() }, [filename, startLine, endLine, app.vault]) const handleClick = () => { openMarkdownFile(app, filename, startLine) } // TODO: Update styles return ( blockContent && (
{filename && (
{filename}
)}
{blockContent}
) ) }