mirror of
https://github.com/muerwre/vault-frontend.git
synced 2025-04-24 20:36:40 +07:00
36 lines
892 B
TypeScript
36 lines
892 B
TypeScript
import {
|
|
useCallback, useEffect, useRef, useState
|
|
} from 'react';
|
|
|
|
export const useCloseOnEscape = (onRequestClose: () => void, ignore_inputs = false) => {
|
|
const onEscape = useCallback(
|
|
(event) => {
|
|
if (event.key !== 'Escape') return;
|
|
if (
|
|
ignore_inputs
|
|
&& (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA')
|
|
) return;
|
|
|
|
onRequestClose();
|
|
},
|
|
[ignore_inputs, onRequestClose],
|
|
);
|
|
|
|
useEffect(() => {
|
|
window.addEventListener('keyup', onEscape);
|
|
|
|
return () => {
|
|
window.removeEventListener('keyup', onEscape);
|
|
};
|
|
}, [onEscape]);
|
|
};
|
|
|
|
export const useDelayedReady = (setReady: (val: boolean) => void, delay: number = 500) => {
|
|
useEffect(() => {
|
|
const timer = setTimeout(() => setReady(true), delay);
|
|
|
|
return () => {
|
|
if (timer) clearTimeout(timer);
|
|
};
|
|
}, [delay, setReady]);
|
|
};
|