@wordpress/compose
Version:
WordPress higher-order components (HOCs).
53 lines (52 loc) • 1.36 kB
JavaScript
// packages/compose/src/hooks/use-disabled/index.ts
import { debounce } from "../../utils/debounce";
import useRefEffect from "../use-ref-effect";
function useDisabled({
isDisabled: isDisabledProp = false
} = {}) {
return useRefEffect(
(node) => {
if (isDisabledProp) {
return;
}
const defaultView = node?.ownerDocument?.defaultView;
if (!defaultView) {
return;
}
const updates = [];
const disable = () => {
node.childNodes.forEach((child) => {
if (!(child instanceof defaultView.HTMLElement)) {
return;
}
if (!child.getAttribute("inert")) {
child.setAttribute("inert", "true");
updates.push(() => {
child.removeAttribute("inert");
});
}
});
};
const debouncedDisable = debounce(disable, 0, {
leading: true
});
disable();
const observer = new window.MutationObserver(debouncedDisable);
observer.observe(node, {
childList: true
});
return () => {
if (observer) {
observer.disconnect();
}
debouncedDisable.cancel();
updates.forEach((update) => update());
};
},
[isDisabledProp]
);
}
export {
useDisabled as default
};
//# sourceMappingURL=index.js.map