@@ -65,29 +65,28 @@ 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- 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- }
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) ;
9190 }
9291 } ) ;
9392
@@ -109,18 +108,16 @@ pub fn use_floating(
109108 cleanup. call ( ( ) ) ;
110109
111110 if let Some ( while_elements_mounted) = & while_elements_mounted_option {
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- }
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+ ) ) ) ) ;
124121 }
125122 } else {
126123 update. call ( ( ) ) ;
0 commit comments