mirror of
https://github.com/better-auth/better-auth.git
synced 2026-08-03 08:49:26 -05:00
32 lines
850 B
TypeScript
32 lines
850 B
TypeScript
"use client";
|
|
import type { MouseEventHandler } from "react";
|
|
import { useEffect, useEffectEvent, useRef, useState } from "react";
|
|
|
|
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];
|
|
}
|