use cipher_factory::prelude::*; use leptos::{prelude::*, tachys::dom::event_target_value}; use std::str::FromStr; use strum::IntoEnumIterator; use web_sys::WheelEvent; #[component] pub fn ConfigurationSection( mode: ReadSignal, set_mode: WriteSignal, output_fmt: ReadSignal, update_output: impl Fn(OutputFormat) + Copy + Send + 'static, ) -> AnyView { let handle_format_change = move |ev| { let val = event_target_value(&ev); let fmt = OutputFormat::from_str(&val).unwrap_or_default(); update_output(fmt); }; let handle_format_wheel = move |ev: WheelEvent| { ev.prevent_default(); let formats = OutputFormat::iter().collect::>(); let current_idx = formats .iter() .position(|f| *f == output_fmt.get()) .unwrap_or(2); let next_idx = if ev.delta_y() > 0.0 { (current_idx + 1) % formats.len() } else if current_idx == 0 { formats.len() - 1 } else { current_idx - 1 }; update_output(formats[next_idx]); }; view! {
{move || { if mode.get() != OperationMode::Decrypt { return view! { }.into_any(); } view! {
} .into_any() }}
} .into_any() }