use crate::*;
pub fn use_props_demo() -> UsePropsDemo {
UsePropsDemo::new(
use_signal(|| "Hello from Parent!".to_string()),
use_signal(String::new),
)
}
pub fn props_on_child_respond(
response_signal: Signal<String>,
message: String,
) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
response_signal.set(message.clone());
})
}
pub fn use_two_way_demo() -> UseTwoWayDemo {
UseTwoWayDemo::new(use_signal(|| "Type here...".to_string()), use_signal(|| 0))
}
pub fn two_way_on_increment(counter: Signal<i32>) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
let current: i32 = counter.get();
counter.set(current + 1);
})
}
pub fn two_way_on_decrement(counter: Signal<i32>) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
let current: i32 = counter.get();
counter.set(current - 1);
})
}
pub fn use_cross_component_demo() -> UseCrossComponentDemo {
let state: UseCrossComponentDemo = UseCrossComponentDemo::new(
use_signal(|| 0.0),
use_signal(|| 32.0),
use_signal(|| 79),
use_signal(|| 70),
use_signal(|| 229),
use_signal(|| "#4f46e5".to_string()),
);
let celsius: Signal<f64> = state.get_celsius();
let fahrenheit: Signal<f64> = state.get_fahrenheit();
let red: Signal<i32> = state.get_red();
let green: Signal<i32> = state.get_green();
let blue: Signal<i32> = state.get_blue();
let hex_color: Signal<String> = state.get_hex_color();
watch!(celsius, |celsius_value| {
fahrenheit.set(celsius_value * 9.0 / 5.0 + 32.0);
});
watch!(fahrenheit, |fahrenheit_value| {
celsius.set((fahrenheit_value - 32.0) * 5.0 / 9.0);
});
watch!(red, green, blue, |red_value, green_value, blue_value| {
let clamped_red: i32 = red_value.clamp(0, 255);
let clamped_green: i32 = green_value.clamp(0, 255);
let clamped_blue: i32 = blue_value.clamp(0, 255);
hex_color.set(format!(
"#{:02x}{:02x}{:02x}",
clamped_red, clamped_green, clamped_blue
));
});
state
}
pub fn cross_on_input_celsius(signal: Signal<f64>) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Input, move |event: NativeEvent| {
if let NativeEvent::Input(input_event) = event {
let parsed: f64 = input_event.get_value().parse().unwrap_or(0.0);
signal.set(parsed);
}
})
}
pub fn cross_on_input_fahrenheit(signal: Signal<f64>) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Input, move |event: NativeEvent| {
if let NativeEvent::Input(input_event) = event {
let parsed: f64 = input_event.get_value().parse().unwrap_or(0.0);
signal.set(parsed);
}
})
}
pub fn cross_on_input_i32(signal: Signal<i32>) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Input, move |event: NativeEvent| {
if let NativeEvent::Input(input_event) = event {
let parsed: i32 = input_event.get_value().parse().unwrap_or(0);
signal.set(parsed.clamp(0, 255));
}
})
}
pub fn use_typed_props_demo() -> UseTypedPropsDemo {
UseTypedPropsDemo::new(use_signal(|| false), use_signal(|| 5), use_signal(|| 0))
}
pub fn typed_props_on_toggle_disabled(disabled: Signal<bool>) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
let current: bool = disabled.get();
disabled.set(!current);
})
}
pub fn typed_props_on_increment(count: Signal<i32>, max_count: Signal<i32>) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
let current: i32 = count.get();
let max: i32 = max_count.get();
if current < max {
count.set(current + 1);
}
})
}
pub fn typed_props_on_reset_count(count: Signal<i32>) -> NativeEventHandler {
NativeEventHandler::new(NativeEventName::Click, move |_event: NativeEvent| {
count.set(0);
})
}
pub fn use_custom_callback_demo() -> UseCustomCallbackDemo {
UseCustomCallbackDemo::new(use_signal(String::new), use_signal(|| "none".to_string()))
}
pub fn custom_on_change(text_signal: Signal<String>, event_name: String) -> NativeEventHandler {
NativeEventHandler::new(
NativeEventName::Other("on_change".to_string()),
move |event: NativeEvent| {
if let NativeEvent::Input(input_event) = event {
text_signal.set(input_event.get_value().clone());
}
let _event_name: String = event_name.clone();
},
)
}
pub fn custom_on_submit(last_event: Signal<String>, event_name: String) -> NativeEventHandler {
NativeEventHandler::new(
NativeEventName::Other("on_submit".to_string()),
move |_event: NativeEvent| {
last_event.set(event_name.clone());
},
)
}
pub fn custom_on_reset(
text_signal: Signal<String>,
last_event: Signal<String>,
event_name: String,
) -> NativeEventHandler {
NativeEventHandler::new(
NativeEventName::Other("on_reset".to_string()),
move |_event: NativeEvent| {
text_signal.set(String::new());
last_event.set(event_name.clone());
},
)
}