gui: load receive panel only once

This commit is contained in:
edouardparis 2024-02-02 17:12:15 +01:00
parent 9b4b6fef1b
commit c268c3a093

View File

@ -34,6 +34,12 @@ pub struct Addresses {
labels: HashMap<String, String>,
}
impl Addresses {
fn is_empty(&self) -> bool {
self.list.is_empty()
}
}
impl Labelled for Addresses {
fn labelled(&self) -> Vec<LabelItem> {
self.list
@ -154,7 +160,18 @@ impl State for ReceivePanel {
));
Command::none()
}
Message::View(view::Message::Next) => self.load(daemon),
Message::View(view::Message::Next) => {
let daemon = daemon.clone();
Command::perform(
async move {
daemon
.get_new_address()
.map(|res| (res.address, res.derivation_index))
.map_err(|e| e.into())
},
Message::ReceiveAddress,
)
}
_ => self
.modal
.as_mut()
@ -164,16 +181,21 @@ impl State for ReceivePanel {
}
fn load(&self, daemon: Arc<dyn Daemon + Sync + Send>) -> Command<Message> {
let daemon = daemon.clone();
Command::perform(
async move {
daemon
.get_new_address()
.map(|res| (res.address, res.derivation_index))
.map_err(|e| e.into())
},
Message::ReceiveAddress,
)
// Fill at least with one address, user will then use the generate button.
if self.addresses.is_empty() {
let daemon = daemon.clone();
Command::perform(
async move {
daemon
.get_new_address()
.map(|res| (res.address, res.derivation_index))
.map_err(|e| e.into())
},
Message::ReceiveAddress,
)
} else {
Command::none()
}
}
}