use leptos::prelude::*;
use crate::GaugeLayout;
#[derive(Clone, Debug, PartialEq)]
pub struct GaugeState {
pub value: Option<f64>,
pub value_min: f64,
pub value_max: f64,
pub cx: f64,
pub cy: f64,
pub inner_radius: f64,
pub outer_radius: f64,
pub max_radius: f64,
pub start_rad: f64,
pub end_rad: f64,
pub value_angle: Option<f64>,
}
impl From<GaugeLayout> for GaugeState {
fn from(layout: GaugeLayout) -> Self {
Self {
value: layout.value,
value_min: layout.value_min,
value_max: layout.value_max,
cx: layout.cx,
cy: layout.cy,
inner_radius: layout.inner_radius,
outer_radius: layout.outer_radius,
max_radius: layout.max_radius,
start_rad: layout.start_rad,
end_rad: layout.end_rad,
value_angle: layout.value_rad,
}
}
}
pub fn use_gauge_state() -> GaugeState {
expect_context::<GaugeState>()
}
#[component]
pub fn GaugeContextProvider(state: GaugeState, children: Children) -> impl IntoView {
provide_context(state);
children()
}