new_amount_btc

This commit is contained in:
pythcoiner 2024-03-03 19:00:54 +01:00 committed by pythcoiner
parent b22f22f0bc
commit 9415dc9390
2 changed files with 28 additions and 4 deletions

View File

@ -319,9 +319,9 @@ pub fn create_spend_tx<'a>(
pub fn recipient_view<'a>(
index: usize,
address: &form::Value<String>,
amount: &form::Value<String>,
label: &form::Value<String>,
address: &'a form::Value<String>,
amount: &'a form::Value<String>,
label: &'a form::Value<String>,
is_max_selected: bool,
) -> Element<'a, CreateSpendMessage> {
Container::new(
@ -395,7 +395,7 @@ pub fn recipient_view<'a>(
None
})
.push_maybe(if !is_max_selected {
Some(form::Form::new_trimmed("0.001 (in BTC)", amount, move |msg| {
Some(form::Form::new_amount_btc("0.001 (in BTC)", amount, move |msg| {
CreateSpendMessage::RecipientEdited(index, "amount", msg)
})
.warning(

View File

@ -1,3 +1,4 @@
use bitcoin::Denomination;
use iced::{widget::text_input, Length};
use crate::{color, component::text, theme, util::Collection, widget::*};
@ -62,6 +63,29 @@ where
}
}
/// Creates a new [`Form`] that restrict input values to valid btc amount before applying the
/// `on_change` function.
/// It expects:
/// - a placeholder
/// - the current value
/// - a function that produces a message when the [`Form`] changes
pub fn new_amount_btc<F>(placeholder: &str, value: &'a Value<String>, on_change: F) -> Self
where
F: 'static + Fn(String) -> Message,
{
Self {
input: text_input::TextInput::new(placeholder, &value.value).on_input(move |s| {
if bitcoin::Amount::from_str_in(&s, Denomination::Bitcoin).is_ok() || s.is_empty() {
on_change(s)
} else {
on_change(value.value.clone())
}
}),
warning: None,
valid: value.valid,
}
}
/// Sets the [`Form`] with a warning message
pub fn warning(mut self, warning: &'a str) -> Self {
self.warning = Some(warning);