mirror of
https://github.com/muerwre/vault-frontend.git
synced 2025-04-25 04:46:40 +07:00
added flow display controls overlay
This commit is contained in:
parent
c8204a41a2
commit
5fef4bc804
14 changed files with 327 additions and 116 deletions
30
src/utils/hooks/useClickOutsideFocus.ts
Normal file
30
src/utils/hooks/useClickOutsideFocus.ts
Normal file
|
@ -0,0 +1,30 @@
|
|||
/**
|
||||
* Handles blur by detecting clicks outside refs.
|
||||
*/
|
||||
import { useCallback, useEffect, useRef, useState } from 'react';
|
||||
|
||||
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);
|
||||
}, [isActive]);
|
||||
|
||||
return { ref, isActive, activate, deactivate };
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue