import React, {useState, useEffect} from 'react'; import CodeBlock from '@theme/CodeBlock'; import Icon from '@site/src/components/Icon'; /** * CodeEmbed component to display code fetched from a URL in a CodeBlock. * @param {object} props * @param {string} props.src - Source URL to fetch the code from. * @param {string} [props.language='java'] - Language for syntax highlighting in CodeBlock. */ const CodeEmbed = ({src, language = 'java'}) => { 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; const title = (