Skip to content

Commit 3ad6556

Browse files
authored
fix: pure render should also check latest popup element (#640)
1 parent 9c7a949 commit 3ad6556

File tree

2 files changed

+6
-6
lines changed

2 files changed

+6
-6
lines changed

src/generate.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,7 @@ export default function generateSelector<
683683
}
684684

685685
useSelectTriggerControl(
686-
[containerRef.current, triggerRef.current && triggerRef.current.getPopupElement()],
686+
() => [containerRef.current, triggerRef.current?.getPopupElement()],
687687
triggerOpen,
688688
onToggleOpen,
689689
);
@@ -897,8 +897,7 @@ export default function generateSelector<
897897

898898
const onInternalMouseDown: React.MouseEventHandler<HTMLDivElement> = (event, ...restArgs) => {
899899
const { target } = event;
900-
const popupElement: HTMLDivElement =
901-
triggerRef.current && triggerRef.current.getPopupElement();
900+
const popupElement: HTMLDivElement = triggerRef.current?.getPopupElement();
902901

903902
// We should give focus back to selector if clicked item is not focusable
904903
if (popupElement && popupElement.contains(target as HTMLElement)) {

src/hooks/useSelectTriggerControl.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
import * as React from 'react';
22

33
export default function useSelectTriggerControl(
4-
elements: (HTMLElement | undefined)[],
4+
elements: () => (HTMLElement | undefined)[],
55
open: boolean,
66
triggerOpen: (open: boolean) => void,
77
) {
88
const propsRef = React.useRef(null);
99
propsRef.current = {
10-
elements: elements.filter(e => e),
1110
open,
1211
triggerOpen,
1312
};
@@ -22,7 +21,9 @@ export default function useSelectTriggerControl(
2221

2322
if (
2423
propsRef.current.open &&
25-
propsRef.current.elements.every(element => !element.contains(target) && element !== target)
24+
elements()
25+
.filter((element) => element)
26+
.every((element) => !element.contains(target) && element !== target)
2627
) {
2728
// Should trigger close
2829
propsRef.current.triggerOpen(false);

0 commit comments

Comments
 (0)