Skip to content

Commit 090e449

Browse files
committed
fix(chess): retain focus after interacting with feature toggle
1 parent f966bcb commit 090e449

1 file changed

Lines changed: 10 additions & 5 deletions

File tree

  • kaggle_environments/envs/open_spiel_env/games/chess/visualizer/v2/src/components

kaggle_environments/envs/open_spiel_env/games/chess/visualizer/v2/src/components/WithPopover.tsx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,21 @@ interface Props {
1515

1616
export function WithPopover({ children, icon, id, label, onChange }: Props) {
1717
const [open, setOpen] = useState(false);
18-
const onChangeRef = useRef(open);
18+
const prevOpenRef = useRef(open);
19+
const onChangeRef = useRef(onChange);
1920
const transition = useTransition({ duration: 0.2, ease: 'easeOut' });
2021
const iconPath = `${svgSymbolPath}#${icon}`;
2122
const triggerRef = useRef<HTMLButtonElement>(null);
2223
const panelRef = useRef<HTMLDivElement>(null);
2324

2425
useEffect(() => {
25-
if (onChange && onChangeRef.current !== open) {
26-
onChangeRef.current = open;
27-
onChange(open);
26+
onChangeRef.current = onChange;
27+
});
28+
29+
useEffect(() => {
30+
if (prevOpenRef.current !== open) {
31+
prevOpenRef.current = open;
32+
onChangeRef.current?.(open);
2833
}
2934

3035
if (!open) return;
@@ -54,7 +59,7 @@ export function WithPopover({ children, icon, id, label, onChange }: Props) {
5459
document.removeEventListener('mousedown', handleMouseDown);
5560
document.removeEventListener('keydown', handleKeyDown);
5661
};
57-
}, [open, onChange]);
62+
}, [open]);
5863

5964
return (
6065
<div className={styles.wrapper}>

0 commit comments

Comments
 (0)