@@ -20,6 +20,7 @@ export function usePopover(popovertarget: string) {
20
20
21
21
const didInteractSig = useSignal < boolean > ( false ) ;
22
22
const popoverSig = useSignal < HTMLElement | null > ( null ) ;
23
+ const initialClickSig = useSignal < boolean > ( false ) ;
23
24
24
25
const loadPolyfill$ = $ ( async ( ) => {
25
26
await import ( '@oddbird/popover-polyfill' ) ;
@@ -42,30 +43,24 @@ export function usePopover(popovertarget: string) {
42
43
didInteractSig . value = true ;
43
44
} ) ;
44
45
45
- useTask$ ( ( { track } ) => {
46
+ useTask$ ( async ( { track } ) => {
46
47
track ( ( ) => didInteractSig . value ) ;
47
48
48
49
if ( ! isBrowser ) return ;
49
50
50
51
// get popover
51
52
if ( ! popoverSig . value ) {
52
53
popoverSig . value = document . getElementById ( popovertarget ) ;
53
- }
54
-
55
- // so it only runs once on click for supported browsers
56
- if ( isSupportedSig . value ) {
57
- if ( ! popoverSig . value ) return ;
58
54
59
- if ( popoverSig . value && popoverSig . value . hasAttribute ( 'popover' ) ) {
60
- /* opens manual on any event */
61
- popoverSig . value . showPopover ( ) ;
55
+ if ( ! initialClickSig . value ) {
56
+ popoverSig . value ?. showPopover ( ) ;
62
57
}
63
58
}
64
59
} ) ;
65
60
66
61
// event is created after teleported properly
67
62
useOnDocument (
68
- 'showpopover ' ,
63
+ 'showpopoverpoly ' ,
69
64
$ ( ( ) => {
70
65
if ( ! didInteractSig . value ) return ;
71
66
@@ -74,7 +69,10 @@ export function usePopover(popovertarget: string) {
74
69
// calls code in here twice for some reason, we think it's because of the client re-render, but it still works
75
70
76
71
// so it only runs once on first click
77
- if ( ! popoverSig . value . classList . contains ( ':popover-open' ) ) {
72
+ if (
73
+ ! popoverSig . value . classList . contains ( ':popover-open' ) &&
74
+ ! isSupportedSig . value
75
+ ) {
78
76
popoverSig . value . showPopover ( ) ;
79
77
}
80
78
} ) ,
@@ -101,12 +99,12 @@ export function usePopover(popovertarget: string) {
101
99
popoverSig . value ?. hidePopover ( ) ;
102
100
} ) ;
103
101
104
- return { showPopover, togglePopover, hidePopover, initPopover$ } ;
102
+ return { showPopover, togglePopover, hidePopover, initPopover$, initialClickSig } ;
105
103
}
106
104
107
105
export const PopoverTrigger = component$ < PopoverTriggerProps > (
108
106
( { popovertarget, disableClickInitPopover = false , ...rest } : PopoverTriggerProps ) => {
109
- const { initPopover$ } = usePopover ( popovertarget ) ;
107
+ const { initPopover$, initialClickSig } = usePopover ( popovertarget ) ;
110
108
111
109
return (
112
110
< button
@@ -116,6 +114,7 @@ export const PopoverTrigger = component$<PopoverTriggerProps>(
116
114
rest . onClick$ ,
117
115
! disableClickInitPopover
118
116
? $ ( async ( ) => {
117
+ initialClickSig . value = true ;
119
118
await initPopover$ ( ) ;
120
119
} )
121
120
: undefined ,
0 commit comments