@@ -65,28 +65,29 @@ pub fn use_floating(
6565 } ) ;
6666
6767 let update = use_callback ( move |_| {
68- if let Some ( reference_element) = reference ( ) . map ( |reference| reference. as_web_event ( ) )
69- && let Some ( floating_element) = floating ( ) . map ( |floating| floating. as_web_event ( ) )
70- {
71- let config = ComputePositionConfig {
72- placement : Some ( placement_option ( ) ) ,
73- strategy : Some ( strategy_option ( ) ) ,
74- middleware : Some ( middleware_option ( ) ) ,
75- } ;
76-
77- let open = open_option ( ) ;
78-
79- let position = compute_position ( ( & reference_element) . into ( ) , & floating_element, config) ;
80- x. set ( position. x ) ;
81- y. set ( position. y ) ;
82- strategy. set ( position. strategy ) ;
83- placement. set ( position. placement ) ;
84- middleware_data. set ( position. middleware_data ) ;
85- // The floating element's position may be recomputed while it's closed
86- // but still mounted (such as when transitioning out). To ensure
87- // `is_positioned` will be `false` initially on the next open,
88- // avoid setting it to `true` when `open === false` (must be specified).
89- is_positioned. set ( open) ;
68+ if let Some ( reference_element) = reference ( ) . map ( |reference| reference. as_web_event ( ) ) {
69+ if let Some ( floating_element) = floating ( ) . map ( |floating| floating. as_web_event ( ) ) {
70+ let config = ComputePositionConfig {
71+ placement : Some ( placement_option ( ) ) ,
72+ strategy : Some ( strategy_option ( ) ) ,
73+ middleware : Some ( middleware_option ( ) ) ,
74+ } ;
75+
76+ let open = open_option ( ) ;
77+
78+ let position =
79+ compute_position ( ( & reference_element) . into ( ) , & floating_element, config) ;
80+ x. set ( position. x ) ;
81+ y. set ( position. y ) ;
82+ strategy. set ( position. strategy ) ;
83+ placement. set ( position. placement ) ;
84+ middleware_data. set ( position. middleware_data ) ;
85+ // The floating element's position may be recomputed while it's closed
86+ // but still mounted (such as when transitioning out). To ensure
87+ // `is_positioned` will be `false` initially on the next open,
88+ // avoid setting it to `true` when `open === false` (must be specified).
89+ is_positioned. set ( open) ;
90+ }
9091 }
9192 } ) ;
9293
@@ -108,16 +109,18 @@ pub fn use_floating(
108109 cleanup. call ( ( ) ) ;
109110
110111 if let Some ( while_elements_mounted) = & while_elements_mounted_option {
111- if let Some ( reference_element) = reference ( ) . map ( |reference| reference. as_web_event ( ) )
112- && let Some ( floating_element) = floating ( ) . map ( |floating| floating. as_web_event ( ) )
113- {
114- while_elements_mounted_cleanup. replace ( Some ( Rc :: new ( ( * while_elements_mounted) (
115- ( & reference_element) . into ( ) ,
116- & floating_element,
117- Rc :: new ( move || {
118- update. call ( ( ) ) ;
119- } ) ,
120- ) ) ) ) ;
112+ if let Some ( reference_element) = reference ( ) . map ( |reference| reference. as_web_event ( ) ) {
113+ if let Some ( floating_element) = floating ( ) . map ( |floating| floating. as_web_event ( ) ) {
114+ while_elements_mounted_cleanup. replace ( Some ( Rc :: new (
115+ ( * while_elements_mounted) (
116+ ( & reference_element) . into ( ) ,
117+ & floating_element,
118+ Rc :: new ( move || {
119+ update. call ( ( ) ) ;
120+ } ) ,
121+ ) ,
122+ ) ) ) ;
123+ }
121124 }
122125 } else {
123126 update. call ( ( ) ) ;
0 commit comments