Files
pezkuwi-extension/packages/extension-ui/src/hooks/useOutsideClick.ts
T
Satoshi Qazi Muhammed 9d769676e4 Move to @pezkuwi/dev 0.86 (eslint 10 toolchain)
- @pezkuwi/dev, dev-test, dev-ts ^0.86.3 in the root and in every
  workspace package (they still asked for 0.84.3)
- tsconfig.base target ES2022, the @pezkuwi/dev default; it carries
  the ErrorOptions type for `cause`
- rethrown errors carry the original as `cause`; rejections are
  normalised to Error
- page/messaging: the typed subscriber is called directly, not as
  `Function`
- chrome mock: constant results through Promise.resolve
- useLedger: drop a construction every branch below repeated
- InputWithLabel: onKeyDown instead of the deprecated onKeyPress
- Account: toggleActions + 1 instead of a pre-increment of a parameter
- optional chains where a guard tested the same value
- specs: mount<React.Component> so the wrappers are not `any`-typed
- AccountsStore.set keeps its async override of KeyringStore.set:
  BaseStore.set handles its own failure, so it never rejects
- extension-chains keeps its ChainProperties assertion: the package's
  own build does not load the type augmentation
- the existing React Compiler findings (37, react-hooks rules only)
  are recorded in eslint-suppressions.json; a new one fails lint
2026-10-09 16:32:46 +04:00

24 lines
693 B
TypeScript

// Copyright 2019-2026 @pezkuwi/extension-ui authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { RefObject } from 'react';
import { useCallback, useEffect } from 'react';
export default function useOutsideClick (refs: RefObject<HTMLDivElement | null>[], callback: () => void): void {
const handleClick = useCallback((e: MouseEvent): void => {
refs.every(({ current }) =>
current &&
!current.contains(e.target as HTMLInputElement)
) && callback();
}, [callback, refs]);
useEffect(() => {
document.addEventListener('click', handleClick);
return (): void => {
document.removeEventListener('click', handleClick);
};
});
}