freya_components/
native_container.rs1use dioxus::prelude::*;
2use freya_core::accessibility::AccessibilityFocusStrategy;
3use freya_elements::{
4 self as dioxus_elements,
5 events::{
6 Key,
7 KeyboardEvent,
8 Modifiers,
9 },
10};
11use freya_hooks::{
12 use_init_native_platform,
13 use_platform,
14};
15
16#[allow(non_snake_case)]
17#[component]
18pub fn NativeContainer(children: Element) -> Element {
19 let mut native_platform = use_init_native_platform();
20 let platform = use_platform();
21
22 let onglobalkeydown = move |e: KeyboardEvent| {
23 let allowed_to_navigate = native_platform.navigation_mark.peek().allowed();
24 if e.key == Key::Tab && allowed_to_navigate {
25 if e.modifiers.contains(Modifiers::SHIFT) {
26 platform.focus(AccessibilityFocusStrategy::Backward);
27 } else {
28 platform.focus(AccessibilityFocusStrategy::Forward);
29 }
30 } else {
31 native_platform.navigation_mark.write().set_allowed(true)
32 }
33 };
34
35 rsx!(rect {
36 width: "100%",
37 height: "100%",
38 onglobalkeydown,
39 {children}
40 })
41}