@@ -10,9 +10,13 @@ type PopoverTriggerProps = {
1010
1111export function usePopover ( popovertarget : string ) {
1212 const hasPolyfillLoadedSig = useSignal < boolean > ( false ) ;
13- const didInteractSig = useSignal < boolean > ( false ) ;
1413 const isSupportedSig = useSignal < boolean > ( false ) ;
1514
15+ const didInteractSig = useSignal < boolean > ( false ) ;
16+ const popoverSig = useSignal < HTMLElement | null > ( null ) ;
17+
18+ const hookExecutedSig = useSignal < boolean > ( false ) ;
19+
1620 const loadPolyfill$ = $ ( async ( ) => {
1721 await import ( '@oddbird/popover-polyfill' ) ;
1822 document . dispatchEvent ( new CustomEvent ( 'poppolyload' ) ) ;
@@ -26,7 +30,6 @@ export function usePopover(popovertarget: string) {
2630 'popover' in HTMLElement . prototype ;
2731
2832 isSupportedSig . value = isSupported ;
29- console . log ( 'INSIDE HERE: ' , isSupportedSig . value ) ;
3033
3134 if ( ! hasPolyfillLoadedSig . value && ! isSupported ) {
3235 await loadPolyfill$ ( ) ;
@@ -38,18 +41,26 @@ export function usePopover(popovertarget: string) {
3841 useTask$ ( ( { track } ) => {
3942 track ( ( ) => didInteractSig . value ) ;
4043
41- if ( isBrowser && isSupportedSig . value ) {
42- const popover = document . getElementById ( popovertarget ) ;
44+ if ( ! isBrowser ) return ;
4345
44- if ( ! popover ) return ;
46+ // get popover
47+ if ( ! popoverSig . value ) {
48+ popoverSig . value = document . getElementById ( popovertarget ) ;
49+ }
50+
51+ // so it only runs once on click for supported browsers
52+ if ( isSupportedSig . value ) {
53+ const popover = popoverSig . value ;
4554
46- console . log ( 'inside interact task: ' , popover ) ;
47- console . log ( 'popover id: ' , popovertarget ) ;
55+ if ( ! popover ) return ;
4856
4957 if ( popover && popover . hasAttribute ( 'popover' ) ) {
5058 popover . showPopover ( ) ;
5159 }
5260 }
61+
62+ console . log ( 'HOOK EXECUTED' ) ;
63+ hookExecutedSig . value = true ;
5364 } ) ;
5465
5566 // event is created after teleported properly
@@ -58,7 +69,7 @@ export function usePopover(popovertarget: string) {
5869 $ ( ( ) => {
5970 if ( ! didInteractSig . value ) return ;
6071
61- const popover = document . querySelector ( `# ${ popovertarget } ` ) ;
72+ const popover = popoverSig . value ;
6273
6374 if ( ! popover ) return ;
6475
@@ -72,12 +83,12 @@ export function usePopover(popovertarget: string) {
7283 } ) ,
7384 ) ;
7485
75- return { initPopover$, isSupportedSig } ;
86+ return { initPopover$ } ;
7687}
7788
7889export const PopoverTrigger = component$ < PopoverTriggerProps > (
7990 ( { popovertarget, ...rest } : PopoverTriggerProps ) => {
80- const { initPopover$, isSupportedSig } = usePopover ( popovertarget ) ;
91+ const { initPopover$ } = usePopover ( popovertarget ) ;
8192
8293 return (
8394 < button
@@ -87,7 +98,6 @@ export const PopoverTrigger = component$<PopoverTriggerProps>(
8798 onClick$ = { [
8899 rest . onClick$ ,
89100 $ ( ( ) => {
90- console . log ( 'isSupported: ' , isSupportedSig . value ) ;
91101 initPopover$ ( ) ;
92102 } ) ,
93103 ] }
0 commit comments