import { ApiRoute } from "@/utils/type"; import classNames from "classnames"; import { useState } from "react"; import Highlight from "react-highlight"; import { BiLogoJavascript, BiSolidCopy } from "react-icons/bi"; import { Options } from "redaxios"; export const JavascriptSnippet = ({ endpoint, headers, parameters, body, onCopyToClipboard, }: { endpoint: ApiRoute; parameters?: Record; headers?: Record; body?: Options | undefined; onCopyToClipboard: (e: string) => void; }) => { const [isCopied, setIsCopied] = useState(false); const generateJavascriptRequestFromEndpoint = () => { const { method, path } = endpoint; const fullpath = `${process.env.NEXT_PUBLIC_APP_APIURL}${path}`; const removeEmptyValues = (data: Record) => { const formattedData = { ...data }; Object.entries(formattedData).forEach(([key, value]) => { if (!value) { delete formattedData[key]; } }); return formattedData; }; const Dict: Record = { GET: () => { const filteredEmptyParameters = removeEmptyValues(parameters ?? {}); return `const response = await fetch( "${fullpath}?${new URLSearchParams(filteredEmptyParameters).toString()}", { method: "${method}", headers: ${JSON.stringify(headers)} } )`; }, DELETE: () => { return `const response = await fetch( "${fullpath}", { method: "${method}", headers: ${JSON.stringify(headers)}, body: ${JSON.stringify(body)} } )`; }, DEFAULT: () => { return `const response = await fetch( "${fullpath}", { method: "${method}", headers: ${JSON.stringify(headers)}, body: ${JSON.stringify(body)} } )`; }, }; return Dict[method] ? Dict[method]() : Dict["DEFAULT"](); }; const handleCopy = () => { onCopyToClipboard(generateJavascriptRequestFromEndpoint()); setIsCopied(true); setTimeout(() => { setIsCopied(false); }, 1000); }; return (

Javascript

{generateJavascriptRequestFromEndpoint()}
Copied!
); };