import { HTMLProps, useState } from "react"; /** * Taken from epic-stack * file : https://github.com/epicweb-dev/epic-stack/blob/main/app/utils/misc.tsx */ function callAll>( ...fns: Array<((...args: Args) => unknown) | undefined> ) { return (...args: Args) => fns.forEach((fn) => fn?.(...args)); } export function useDoubleCheck< P extends Omit, "size"> = Omit, "size">, >() { const [doubleCheck, setDoubleCheck] = useState(false); function getButtonProps(userProps?: P) { const onBlur: P["onBlur"] = () => setDoubleCheck(false); const onClick: P["onClick"] = doubleCheck ? () => void setDoubleCheck(false) : (e) => { e.preventDefault(); setDoubleCheck(true); }; const onKeyUp: HTMLProps["onKeyUp"] = (e) => { if (e.key === "Escape") { setDoubleCheck(false); } }; return { ...userProps, onBlur: callAll(onBlur, userProps?.onBlur), onClick: callAll(onClick, userProps?.onClick), onKeyUp: callAll(onKeyUp, userProps?.onKeyUp), } as P; } return { doubleCheck, getButtonProps }; }