mirror of
https://github.com/amithkoujalgi/ollama4j.git
synced 2025-11-02 09:30:41 +01:00
Added CodeEmbed component to embed code snippets in markdowns
This commit is contained in:
72
docs/src/components/CodeEmbed/index.js
Normal file
72
docs/src/components/CodeEmbed/index.js
Normal file
@@ -0,0 +1,72 @@
|
||||
import React, { useState, useEffect } from 'react';
|
||||
import CodeBlock from '@theme/CodeBlock';
|
||||
|
||||
const CodeEmbed = ({ src }) => {
|
||||
const [code, setCode] = useState('');
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [error, setError] = useState(null);
|
||||
|
||||
useEffect(() => {
|
||||
let isMounted = true;
|
||||
|
||||
const fetchCodeFromUrl = async (url) => {
|
||||
if (!isMounted) return;
|
||||
|
||||
setLoading(true);
|
||||
setError(null);
|
||||
|
||||
try {
|
||||
const response = await fetch(url);
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! status: ${response.status}`);
|
||||
}
|
||||
const data = await response.text();
|
||||
if (isMounted) {
|
||||
setCode(data);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Failed to fetch code:', err);
|
||||
if (isMounted) {
|
||||
setError(err);
|
||||
setCode(`// Failed to load code from ${url}\n// ${err.message}`);
|
||||
}
|
||||
} finally {
|
||||
if (isMounted) {
|
||||
setLoading(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (src) {
|
||||
fetchCodeFromUrl(src);
|
||||
}
|
||||
|
||||
return () => {
|
||||
isMounted = false;
|
||||
};
|
||||
}, [src]);
|
||||
|
||||
const githubUrl = src ? src.replace('https://raw.githubusercontent.com', 'https://github.com').replace('/refs/heads/', '/blob/') : null;
|
||||
const fileName = src ? src.substring(src.lastIndexOf('/') + 1) : null;
|
||||
|
||||
return (
|
||||
loading ? (
|
||||
<div>Loading code...</div>
|
||||
) : error ? (
|
||||
<div>Error: {error.message}</div>
|
||||
) : (
|
||||
<div style={{ backgroundColor: '#f5f5f5', padding: '0px', borderRadius: '5px' }}>
|
||||
<div style={{ textAlign: 'right' }}>
|
||||
{githubUrl && (
|
||||
<a href={githubUrl} target="_blank" rel="noopener noreferrer" style={{ paddingRight: '15px', color: 'gray', fontSize: '0.8em', fontStyle: 'italic', display: 'inline-flex', alignItems: 'center' }}>
|
||||
View on GitHub
|
||||
</a>
|
||||
)}
|
||||
</div>
|
||||
<CodeBlock title={fileName} className="language-java">{code}</CodeBlock>
|
||||
</div>
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
export default CodeEmbed;
|
||||
Reference in New Issue
Block a user