From 59504ac336608f18570008e571977c9f245514d1 Mon Sep 17 00:00:00 2001 From: Alejandro Borbolla Date: Thu, 31 Jul 2025 00:31:34 +0200 Subject: [PATCH] refactor: Add `useCopy()` The `useCopy()` hook is pretty simple, as it handle a state variable (`copied`) and put it back to false after a `timeout` --- client/src/lib/hooks/useCopy.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 client/src/lib/hooks/useCopy.ts diff --git a/client/src/lib/hooks/useCopy.ts b/client/src/lib/hooks/useCopy.ts new file mode 100644 index 00000000..8dd7e401 --- /dev/null +++ b/client/src/lib/hooks/useCopy.ts @@ -0,0 +1,29 @@ +"use client"; + +import { useEffect, useState } from "react"; + +type UseCopyProps = { + timeout?: number; +}; + +function useCopy({ timeout = 500 }: UseCopyProps = {}) { + const [copied, setCopied] = useState(false); + + useEffect(() => { + let timeoutId: NodeJS.Timeout; + if (copied) { + timeoutId = setTimeout(() => { + setCopied(false); + }, timeout); + } + return () => { + if (timeoutId) { + clearTimeout(timeoutId); + } + }; + }, [copied]); + + return { copied, setCopied }; +} + +export default useCopy;