Skip to content

Commit d9b021e

Browse files
geoffreygarrettgeoffreygarrettDanielleHuisman
authored
Update Label to Leptos 0.7 (#427)
* Update Label to Leptos 0.7 * Cleanup --------- Co-authored-by: geoffreygarrett <geoffrey@apollo.xyz> Co-authored-by: Daniëlle Huisman <danielle@huisman.me>
1 parent 350ddad commit d9b021e

File tree

4 files changed

+50
-57
lines changed

4 files changed

+50
-57
lines changed

Cargo.lock

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

book/src/primitives/components/label.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,10 @@ Contains the content for the label.
103103
{{#tabs global="framework" }}
104104
{{#tab name="Leptos" }}
105105

106-
| Prop | Type | Default |
107-
| --------------- | ------------------------------ | ------- |
108-
| `on_mouse_down` | `Option<Callback<MouseEvent>>` | - |
106+
| Prop | Type | Default |
107+
| --------------- | --------------------------- | ------- |
108+
| `as_child` | `MaybeProp<bool>` | `false` |
109+
| `on_mouse_down` | `MaybeCallback<MouseEvent>` | - |
109110

110111
{{#endtab }}
111112
{{#tab name="Yew" }}

packages/primitives/leptos/label/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,7 @@ version.workspace = true
1111

1212
[dependencies]
1313
leptos.workspace = true
14+
leptos-maybe-callback.workspace = true
15+
leptos-node-ref.workspace = true
16+
radix-leptos-primitive = { path = "../primitive", version = "0.0.2" }
1417
web-sys.workspace = true
Lines changed: 31 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,39 @@
1-
use leptos::{ev::MouseEvent, prelude::*};
2-
3-
pub struct UseLabelProps {
4-
on_mouse_down: Option<Callback<MouseEvent>>,
5-
}
6-
7-
pub struct UseLabelAttrs {
8-
on_mouse_down: Callback<MouseEvent>,
9-
}
10-
11-
pub fn use_label(props: UseLabelProps) -> UseLabelAttrs {
12-
UseLabelAttrs {
13-
on_mouse_down: Callback::new(move |event: MouseEvent| {
14-
// Only prevent text selection if clicking inside the label itself.
15-
let target = event_target::<web_sys::Element>(&event);
16-
if target
17-
.closest("button, input, select, textarea")
18-
.expect("Element should be able to query closest.")
19-
.is_some()
20-
{
21-
return;
22-
}
23-
24-
if let Some(on_mouse_down) = props.on_mouse_down {
25-
on_mouse_down.run(event.clone());
26-
}
27-
28-
// Prevent text selection when double clicking label.
29-
if !event.default_prevented() && event.detail() > 1 {
30-
event.prevent_default();
31-
}
32-
}),
33-
}
34-
}
1+
use leptos::{ev::MouseEvent, html, prelude::*};
2+
use leptos_maybe_callback::MaybeCallback;
3+
use leptos_node_ref::AnyNodeRef;
4+
use radix_leptos_primitive::Primitive;
355

366
#[component]
377
pub fn Label(
38-
#[prop(into, optional)] on_mouse_down: Option<Callback<MouseEvent>>,
39-
#[prop(optional)] children: Option<Children>,
8+
#[prop(into, optional)] on_mouse_down: MaybeCallback<MouseEvent>,
9+
#[prop(into, optional)] as_child: MaybeProp<bool>,
10+
#[prop(into, optional)] node_ref: AnyNodeRef,
11+
children: TypedChildrenFn<impl IntoView + 'static>,
4012
) -> impl IntoView {
41-
let UseLabelAttrs { on_mouse_down } = use_label(UseLabelProps { on_mouse_down });
42-
4313
view! {
44-
<label on:mousedown=move |event| on_mouse_down.run(event)>
45-
{children.map(|children| children())}
46-
</label>
47-
}
48-
}
14+
<Primitive
15+
element=html::label
16+
as_child=as_child
17+
node_ref=node_ref
18+
children=children
19+
on:mousedown=move |event: MouseEvent| {
20+
// Only prevent text selection if clicking inside the label itself.
21+
let target = event_target::<web_sys::Element>(&event);
22+
if target
23+
.closest("button, input, select, textarea")
24+
.expect("Element should be able to query closest.")
25+
.is_some()
26+
{
27+
return;
28+
}
4929

50-
#[component]
51-
pub fn LabelAsChild<R, RV>(
52-
#[prop(into, optional)] on_mouse_down: Option<Callback<MouseEvent>>,
53-
render: R,
54-
) -> impl IntoView
55-
where
56-
R: Fn(UseLabelAttrs) -> RV,
57-
RV: IntoView,
58-
{
59-
let attrs = use_label(UseLabelProps { on_mouse_down });
30+
on_mouse_down.run(event.clone());
6031

61-
render(attrs)
32+
// Prevent text selection when double clicking label.
33+
if !event.default_prevented() && event.detail() > 1 {
34+
event.prevent_default();
35+
}
36+
}
37+
/>
38+
}
6239
}

0 commit comments

Comments
 (0)