1
0
Fork 0
mirror of https://github.com/muerwre/vault-frontend.git synced 2025-04-25 12:56:41 +07:00

refactored hooks directory

This commit is contained in:
Fedor Katurov 2022-01-02 18:17:09 +07:00
parent efa3ba902d
commit f76a5a4798
106 changed files with 122 additions and 144 deletions

View file

@ -0,0 +1,33 @@
/**
* Handles blur by detecting clicks outside refs.
*/
import { useCallback, useEffect, useRef, useState } from 'react';
import { useCloseOnEscape } from '~/hooks';
export const useClickOutsideFocus = () => {
const ref = useRef<HTMLElement>();
const [isActive, setIsActive] = useState(false);
const activate = useCallback(() => setIsActive(true), [setIsActive]);
const deactivate = useCallback(() => setIsActive(false), [setIsActive]);
useEffect(() => {
if (!isActive || !ref.current) {
return;
}
const deactivator = (event: MouseEvent) => {
if (!ref.current?.contains(event.target as Node)) {
deactivate();
}
};
document.addEventListener('mouseup', deactivator);
return () => document.removeEventListener('mouseup', deactivator);
}, [deactivate, isActive]);
useCloseOnEscape(deactivate);
return { ref, isActive, activate, deactivate };
};