preserveFocus = (node) => {
let lastFocused = null;
function onFocus(e) {
if (node.contains(e.target)) {
lastFocused = e.target;
} else {
lastFocused = null;
}
}
function onPointerDown(e) {
if (!node.contains(e.target)) {
lastFocused = null;
}
}
document.addEventListener("pointerdown", onPointerDown, true);
document.addEventListener("focus", onFocus, true);
const stopWatchingConnection = trackParentChain(
node,
() => {
if (lastFocused && node.contains(lastFocused)) {
lastFocused.focus();
} else {
}
},
() => {}
);
return () => {
document.removeEventListener("pointerdown", onPointerDown, true);
document.removeEventListener("focus", onFocus, true);
stopWatchingConnection();
};
}