import clsx from "clsx" import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef, useState, } from "react" import TrashIcon from "../../fundamentals/icons/trash-icon" import Spinner from "../spinner" import Tooltip from "../tooltip" type Props = { onDelete: () => void deleting?: boolean className?: string children?: React.ReactNode } const TwoStepDelete = forwardRef( ({ onDelete, deleting = false, children, className }: Props, ref) => { const [armed, setArmed] = useState(false) const innerRef = useRef(null) useImperativeHandle( ref, () => innerRef.current ) const handleTwoStepDelete = () => { if (!armed) { setArmed(true) return } onDelete() setArmed(false) } const disarmOnClickOutside = useCallback( (e: MouseEvent) => { if (innerRef.current && !innerRef.current.contains(e.target as Node)) { if (armed) { setArmed(false) } } }, [armed] ) useEffect(() => { document.addEventListener("mousedown", disarmOnClickOutside) return () => { document.removeEventListener("mousedown", disarmOnClickOutside) } }, [disarmOnClickOutside]) return ( ) } ) export default TwoStepDelete