'use client'; import React, { Children, MouseEvent, ReactElement, ReactNode, useState, } from 'react'; import styles from './CodeSnippet.module.css'; function CodeSnippetCopyButton({ copyText, }: { copyText: string; }) { const [copyButtonTooltip, setCopyButtonTooltip] = useState(false); const [showTooltip, setShowTooltip] = useState(false); const handleCopy = (e: MouseEvent) => { setCopyButtonTooltip(true); setTimeout(() => { setCopyButtonTooltip(false); }, 1000); navigator.clipboard.writeText(copyText ?? ''); }; return (
{copyButtonTooltip ? 'Copied!' : 'Click to Copy'}
); } function SnippetLanguageDropdown({ selectedLanguage, snippetLanguages, handleSelectChange, }: { selectedLanguage: string; snippetLanguages: string[]; handleSelectChange: ( e: React.ChangeEvent ) => void; }) { return (
); } export default function CodeSnippet({ children, method, heading, defaultLanguage, }: { children: ReactNode; method?: string; heading: string; defaultLanguage: string; }) { const methodStyles: { [key: string]: string } = { GET: styles.get, POST: styles.post, PUT: styles.put, DELETE: styles.delete, }; const [selectedLanguage, setSelectedLanguage] = useState(defaultLanguage); const handleSelectChange = ( e: React.ChangeEvent ) => { setSelectedLanguage(e.target.value); }; const code = Children.toArray(children) .filter( child => React.isValidElement(child) && child.props.className === `language-${selectedLanguage}` ) .map(child => { return child as ReactElement; })[0]; const snippetLanguages = Children.toArray(children).map( child => { if (React.isValidElement(child)) { const languageClassParts = child.props.className.split('-'); if (languageClassParts.length > 1) { const language = languageClassParts[1]; return language; } } } ); return (
{method ? ( {method} ) : null}{' '} {heading}
{snippetLanguages.length > 1 ? ( <>
) : null}
{code}
); }