From 21ff25eebbb5424e3bf1d2da3140bd74a91b16f4 Mon Sep 17 00:00:00 2001 From: Joshua Chen Date: Thu, 24 Mar 2022 23:52:45 +0800 Subject: [PATCH] fix(theme-classic): minor code copy button improvements (#6986) --- .../src/theme/CodeBlock/CopyButton/index.tsx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/docusaurus-theme-classic/src/theme/CodeBlock/CopyButton/index.tsx b/packages/docusaurus-theme-classic/src/theme/CodeBlock/CopyButton/index.tsx index 4a02ec1306..dbc48c99d2 100644 --- a/packages/docusaurus-theme-classic/src/theme/CodeBlock/CopyButton/index.tsx +++ b/packages/docusaurus-theme-classic/src/theme/CodeBlock/CopyButton/index.tsx @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import React, {useState} from 'react'; +import React, {useCallback, useState, useRef, useEffect} from 'react'; import clsx from 'clsx'; import copy from 'copy-text-to-clipboard'; import {translate} from '@docusaurus/Translate'; @@ -15,14 +15,16 @@ import styles from './styles.module.css'; export default function CopyButton({code}: Props): JSX.Element { const [isCopied, setIsCopied] = useState(false); - const handleCopyCode = () => { + const copyTimeout = useRef(undefined); + const handleCopyCode = useCallback(() => { copy(code); setIsCopied(true); - - setTimeout(() => { + copyTimeout.current = window.setTimeout(() => { setIsCopied(false); - }, 2000); - }; + }, 1000); + }, [code]); + + useEffect(() => () => window.clearTimeout(copyTimeout.current), []); return (