feat: prevent short-circuit evaluation for validation
This commit is contained in:
1 parent
f08fee1246
commit
e0b54b96f9
3 files changed
+37
-20
No files matched your search
+21
-14
@@ -11,27 +11,27 @@ use std::collections::HashMap;
|
||||
pub enum InputType {
|
||||
/// Represents a text input. Requires a `String` key, `String` label, and `String` placeholder.
|
||||
/// The entered value will be returned as a single `String` value.
|
||||
Text(String, String, String),
|
||||
Text(String, String, String, bool),
|
||||
/// Represents a number input. Requires a `String` key, `String` label, and a `String` placeholder.
|
||||
/// The entered value will be returned as a `String`, and will be parseable into any number type
|
||||
/// (i.e. an `i32`, `i64`, etc)
|
||||
Number(String, String, String),
|
||||
Number(String, String, String, bool),
|
||||
/// Represents a radio input. Requires a `String` key, `String` label, and a series of `String`
|
||||
/// options. The selected value will be returned as a `String`.
|
||||
Radio(String, String, Vec<String>),
|
||||
Radio(String, String, Vec<String>, bool),
|
||||
/// Represents a checkbox input. Requires a `String` key, `String` label, and a series of `String`
|
||||
/// options. The selected values will be returned as a `Vec<String>`.
|
||||
Checkbox(String, String, Vec<String>),
|
||||
Checkbox(String, String, Vec<String>, bool),
|
||||
/// Represents a dropdown input. Requires a `String` key, `String` label, and a series
|
||||
/// of `String` options. The selected value will be returned as a `String`.
|
||||
Select(String, String, Vec<String>),
|
||||
Select(String, String, Vec<String>, bool),
|
||||
}
|
||||
|
||||
impl InputType {
|
||||
pub fn into_view(self, data_map: RwSignal<HashMap<String, ValueType>>) -> impl IntoView {
|
||||
view! {
|
||||
{match self {
|
||||
InputType::Text(member, label, placeholder) =>
|
||||
InputType::Text(member, label, placeholder, required) =>
|
||||
EitherOf5::A(view! {
|
||||
<Row>
|
||||
<OutlinedTextField
|
||||
@@ -39,10 +39,11 @@ impl InputType {
|
||||
placeholder = placeholder.clone()
|
||||
data_member = member.clone()
|
||||
data_map = data_map
|
||||
required = required
|
||||
/>
|
||||
</Row>
|
||||
}),
|
||||
InputType::Number(member, label, placeholder) =>
|
||||
InputType::Number(member, label, placeholder, required) =>
|
||||
EitherOf5::B(view! {
|
||||
<OutlinedTextField
|
||||
label = label.clone()
|
||||
@@ -50,33 +51,37 @@ impl InputType {
|
||||
data_member = member.clone()
|
||||
data_map = data_map
|
||||
input_type = TextFieldType::Number
|
||||
required = required
|
||||
/>
|
||||
}),
|
||||
InputType::Checkbox(member, label, options) =>
|
||||
InputType::Checkbox(member, label, options, required) =>
|
||||
EitherOf5::C(view! {
|
||||
<CheckboxList
|
||||
label = label.clone()
|
||||
items = options.clone()
|
||||
data_member = member.clone()
|
||||
data_map = data_map
|
||||
required = required
|
||||
/>
|
||||
}),
|
||||
InputType::Radio(member, label, options) =>
|
||||
InputType::Radio(member, label, options, required) =>
|
||||
EitherOf5::D(view! {
|
||||
<RadioList
|
||||
label = label.clone()
|
||||
data_member = member.clone()
|
||||
data_map = data_map
|
||||
items = options.clone()
|
||||
required = required
|
||||
/>
|
||||
}),
|
||||
InputType::Select(member, label, options) =>
|
||||
InputType::Select(member, label, options, required) =>
|
||||
EitherOf5::E(view! {
|
||||
<Select
|
||||
label = label.clone()
|
||||
value_list = options.clone()
|
||||
data_member = member.clone()
|
||||
data_map = data_map
|
||||
required = required
|
||||
/>
|
||||
})
|
||||
}}
|
||||
@@ -104,19 +109,21 @@ impl InputType {
|
||||
/// ```
|
||||
#[macro_export]
|
||||
macro_rules! input {
|
||||
($variant:ident, $key:expr, $label:expr, [$($option:expr),* $(,)?]) => {
|
||||
($variant:ident, $key:expr, $label:expr, $required:expr, [$($option:expr),* $(,)?]) => {
|
||||
$crate::common::InputType::$variant(
|
||||
$key.to_string(),
|
||||
$label.to_string(),
|
||||
vec![$($option.to_string()), *]
|
||||
vec![$($option.to_string()), *],
|
||||
$required
|
||||
)
|
||||
};
|
||||
|
||||
($variant:ident, $key:expr, $label:expr, $placeholder:expr) => {
|
||||
($variant:ident, $key:expr, $label:expr, $required:expr, $placeholder:expr) => {
|
||||
$crate::common::InputType::$variant(
|
||||
$key.to_string(),
|
||||
$label.to_string(),
|
||||
$placeholder.to_string()
|
||||
$placeholder.to_string(),
|
||||
$required
|
||||
)
|
||||
};
|
||||
}
|
||||
Reference in new issue
Block a user