use yew::*;
#[derive(Properties)]
pub struct TrapDoorPanelProps {
pub id: Option<&'static str>,
pub class: Option<&'static str>,
pub children: Children,
}
impl PartialEq for TrapDoorPanelProps {
fn eq(&self, _other: &Self) -> bool {
false
}
}
#[function_component(TrapDoorPanel)]
pub fn trap_door_panel(props: &TrapDoorPanelProps) -> Html {
let sizer = use_node_ref();
let width = use_state_eq(|| 0.0);
use_effect_with((width.setter(), sizer.clone()), |(width, sizer)| {
width.set(
sizer
.cast::<web_sys::HtmlElement>()
.unwrap()
.get_bounding_client_rect()
.width(),
)
});
html! {
<div id={props.id} class={props.class} ref={sizer}>
{ props.children.clone() }
<div class="scroll-panel-auto-width" style={format!("width:{}px", *width)} />
</div>
}
}