mirror of
https://github.com/LukeHagar/better-auth.git
synced 2025-12-06 20:37:44 +00:00
Co-authored-by: KinfeMichael Tariku <65047246+Kinfe123@users.noreply.github.com> Co-authored-by: Kinfe123 <kinfishtech@gmail.com>
32 lines
881 B
TypeScript
32 lines
881 B
TypeScript
"use client";
|
|
import { type MouseEventHandler, useEffect, useRef, useState } from "react";
|
|
import { useEffectEvent } from "fumadocs-core/utils/use-effect-event";
|
|
|
|
export function useCopyButton(
|
|
onCopy: () => void | Promise<void>,
|
|
): [checked: boolean, onClick: MouseEventHandler] {
|
|
const [checked, setChecked] = useState(false);
|
|
const timeoutRef = useRef<number | null>(null);
|
|
|
|
const onClick: MouseEventHandler = useEffectEvent(() => {
|
|
if (timeoutRef.current) window.clearTimeout(timeoutRef.current);
|
|
const res = Promise.resolve(onCopy());
|
|
|
|
void res.then(() => {
|
|
setChecked(true);
|
|
timeoutRef.current = window.setTimeout(() => {
|
|
setChecked(false);
|
|
}, 1500);
|
|
});
|
|
});
|
|
|
|
// Avoid updates after being unmounted
|
|
useEffect(() => {
|
|
return () => {
|
|
if (timeoutRef.current) window.clearTimeout(timeoutRef.current);
|
|
};
|
|
}, []);
|
|
|
|
return [checked, onClick];
|
|
}
|