* docs(refactoring): configured eslint and typescript (#3511) * docs: configured eslint and typescript * fixed yarn.lock * docs(refactoring): migrate components directory to typescript (#3517) * docs: migrate components directory to typescript * removed vscode settings * fix following merge * docs: refactored QueryNote component (#3576) * docs: refactored first batch of theme components (#3579) * docs: refactored second batch of theme components (#3580) * added missing badge styles * fix after merge * docs(refactoring): migrated remaining component to TypeScript (#3770) * docs(refactoring): configured eslint and typescript (#3511) * docs: configured eslint and typescript * fixed yarn.lock * docs(refactoring): migrate components directory to typescript (#3517) * docs: migrate components directory to typescript * removed vscode settings * fix following merge * docs: refactored QueryNote component (#3576) * docs: refactored first batch of theme components (#3579) * docs: refactored second batch of theme components (#3580) * added missing badge styles * docs: refactoring second batch of theme components * fix after merge * refactored icons and other components * docs: refactored all components * docs(refactoring): set up and configured Tailwind Css (#3841) * docs: added tailwind config * docs: added more tailwind configurations * add includes option * added more tailwind configurations * fix to configurations * docs(refactoring): use tailwind css (#4134) * docs: added tailwind config * docs: added more tailwind configurations * add includes option * added more tailwind configurations * fix to configurations * docs(refactoring): refactored all styles to use tailwind css (#4132) * refactored Badge component to use tailwind css * refactored Bordered component to use tailwind css * updated to latest docusaurus * refactored BorderedIcon component to use tailwind css * refactored Feedback component to use tailwind css * refactored icons and footersociallinks to tailwind css * start refactoring of large card * refactored large card styling * refactored until admonitions * refactored until codeblock * refactored until Tabs * refactored Tabs (without testing * finished refactoring styles to tailwind css * upgraded to version 2.4.1 * general fixes * adjusted eslint configurations * fixed ignore files * fixes to large card * fix search styling * fix npx command * updated tabs to use isCodeTabs prop * fixed os tabs * removed os-tabs class in favor of general styling * improvements to buttons * fix for searchbar * fixed redocly download button * chore: added eslint code action (#4135) * small change in commerce modules page
48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import React, { useState, useEffect, useRef, useCallback } from "react"
|
|
// @ts-expect-error: wait until docusaurus uses type: module
|
|
import copy from "copy-text-to-clipboard"
|
|
import Tooltip from "@site/src/components/Tooltip"
|
|
import clsx from "clsx"
|
|
|
|
type CopyButtonProps = {
|
|
text: string
|
|
buttonClassName?: string
|
|
tooltipClassName?: string
|
|
} & React.HTMLAttributes<HTMLDivElement>
|
|
|
|
const CopyButton: React.FC<CopyButtonProps> = ({
|
|
text,
|
|
buttonClassName = "",
|
|
tooltipClassName = "",
|
|
children,
|
|
}) => {
|
|
const [isCopied, setIsCopied] = useState(false)
|
|
const copyTimeout = useRef(undefined)
|
|
|
|
const handleCopy = useCallback(() => {
|
|
copy(text)
|
|
setIsCopied(true)
|
|
copyTimeout.current = window.setTimeout(() => {
|
|
setIsCopied(false)
|
|
}, 1000)
|
|
}, [text])
|
|
|
|
useEffect(() => () => window.clearTimeout(copyTimeout.current), [])
|
|
|
|
return (
|
|
<Tooltip
|
|
text={isCopied ? `Copied!` : `Copy to Clipboard`}
|
|
tooltipClassName={tooltipClassName}
|
|
>
|
|
<span
|
|
className={clsx("tw-cursor-pointer", buttonClassName)}
|
|
onClick={handleCopy}
|
|
>
|
|
{children}
|
|
</span>
|
|
</Tooltip>
|
|
)
|
|
}
|
|
|
|
export default CopyButton
|