'use client'; import React, { Children, MouseEvent, ReactNode, useState, } from 'react'; import styles from './CodeSnippet.module.css'; function CodeSnippetCopyButton() { const [copyButtonTooltip, setCopyButtonTooltip] = useState(false); const [showTooltip, setShowTooltip] = useState(false); const handleCopy = (e: MouseEvent) => { setCopyButtonTooltip(true); setTimeout(() => { setCopyButtonTooltip(false); }, 1000); const target = e.currentTarget; const code = target.parentElement?.parentElement?.parentElement?.parentElement?.querySelector( 'pre' )?.innerText ?? ''; navigator.clipboard.writeText(code); }; 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 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}
          {Children.toArray(children)
            .filter(
              child =>
                React.isValidElement(child) &&
                child.props.className ===
                  `language-${selectedLanguage}`
            )
            .map(child => {
              return child;
            })}
        
); }