Make user finish sign process before opening new modal
This commit is contained in:
parent
1d1a281955
commit
874d2d4068
@ -165,9 +165,16 @@ impl PsbtState {
|
||||
}
|
||||
}
|
||||
Message::View(view::Message::Spend(view::SpendTxMessage::Cancel)) => {
|
||||
if let Some(PsbtModal::Sign(SignModal { display_modal, .. })) = &mut self.modal {
|
||||
*display_modal = false;
|
||||
return Task::none();
|
||||
if let Some(PsbtModal::Sign(SignModal {
|
||||
display_modal,
|
||||
signing,
|
||||
..
|
||||
})) = &mut self.modal
|
||||
{
|
||||
if !signing.is_empty() {
|
||||
*display_modal = false;
|
||||
return Task::none();
|
||||
}
|
||||
}
|
||||
|
||||
self.modal = None;
|
||||
@ -231,7 +238,15 @@ impl PsbtState {
|
||||
Message::Updated(Ok(_)) => {
|
||||
self.saved = true;
|
||||
if let Some(modal) = self.modal.as_mut() {
|
||||
return modal.as_mut().update(daemon.clone(), message, &mut self.tx);
|
||||
let cmd = modal.as_mut().update(daemon.clone(), message, &mut self.tx);
|
||||
// if modal is only the pending notif then we remove it once the psbt was
|
||||
// updated.
|
||||
if let PsbtModal::Sign(SignModal { display_modal, .. }) = modal {
|
||||
if !*display_modal {
|
||||
self.modal = None;
|
||||
}
|
||||
}
|
||||
return cmd;
|
||||
}
|
||||
}
|
||||
Message::BroadcastModal(res) => match res {
|
||||
@ -271,6 +286,11 @@ impl PsbtState {
|
||||
&self.wallet.keys_aliases,
|
||||
self.labels_edited.cache(),
|
||||
cache.network,
|
||||
if let Some(PsbtModal::Sign(m)) = &self.modal {
|
||||
m.is_signing()
|
||||
} else {
|
||||
false
|
||||
},
|
||||
self.warning.as_ref(),
|
||||
);
|
||||
if let Some(modal) = &self.modal {
|
||||
@ -462,6 +482,10 @@ impl SignModal {
|
||||
recovery_timelock,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_signing(&self) -> bool {
|
||||
!self.signing.is_empty()
|
||||
}
|
||||
}
|
||||
|
||||
impl Modal for SignModal {
|
||||
@ -503,6 +527,7 @@ impl Modal for SignModal {
|
||||
self.signing.remove(&fingerprint);
|
||||
match res {
|
||||
Err(e) => {
|
||||
self.display_modal = true;
|
||||
if !matches!(e, Error::HardwareWallet(async_hwi::Error::UserRefused)) {
|
||||
self.error = Some(e)
|
||||
}
|
||||
|
||||
@ -1018,6 +1018,11 @@ impl Step for SaveSpend {
|
||||
&psbt_state.wallet.keys_aliases,
|
||||
psbt_state.labels_edited.cache(),
|
||||
cache.network,
|
||||
if let Some(psbt::PsbtModal::Sign(m)) = &psbt_state.modal {
|
||||
m.is_signing()
|
||||
} else {
|
||||
false
|
||||
},
|
||||
psbt_state.warning.as_ref(),
|
||||
);
|
||||
if let Some(modal) = &psbt_state.modal {
|
||||
|
||||
@ -46,6 +46,7 @@ pub fn psbt_view<'a>(
|
||||
key_aliases: &'a HashMap<Fingerprint, String>,
|
||||
labels_editing: &'a HashMap<String, form::Value<String>>,
|
||||
network: Network,
|
||||
currently_signing: bool,
|
||||
warning: Option<&Error>,
|
||||
) -> Element<'a, Message> {
|
||||
dashboard(
|
||||
@ -72,7 +73,12 @@ pub fn psbt_view<'a>(
|
||||
}),
|
||||
)
|
||||
.push(spend_header(tx, labels_editing))
|
||||
.push(spend_overview_view(tx, desc_info, key_aliases))
|
||||
.push(spend_overview_view(
|
||||
tx,
|
||||
desc_info,
|
||||
key_aliases,
|
||||
currently_signing,
|
||||
))
|
||||
.push(
|
||||
Column::new()
|
||||
.spacing(20)
|
||||
@ -96,7 +102,11 @@ pub fn psbt_view<'a>(
|
||||
.push(
|
||||
button::secondary(None, "Delete")
|
||||
.width(Length::Fixed(200.0))
|
||||
.on_press(Message::Spend(SpendTxMessage::Delete)),
|
||||
.on_press_maybe(if currently_signing {
|
||||
None
|
||||
} else {
|
||||
Some(Message::Spend(SpendTxMessage::Delete))
|
||||
}),
|
||||
)
|
||||
.width(Length::Fill)
|
||||
} else {
|
||||
@ -105,7 +115,11 @@ pub fn psbt_view<'a>(
|
||||
.push(
|
||||
button::secondary(None, "Save")
|
||||
.width(Length::Fixed(150.0))
|
||||
.on_press(Message::Spend(SpendTxMessage::Save)),
|
||||
.on_press_maybe(if currently_signing {
|
||||
None
|
||||
} else {
|
||||
Some(Message::Spend(SpendTxMessage::Save))
|
||||
}),
|
||||
)
|
||||
.width(Length::Fill)
|
||||
})
|
||||
@ -321,6 +335,7 @@ pub fn spend_overview_view<'a>(
|
||||
tx: &'a SpendTx,
|
||||
desc_info: &'a LianaPolicy,
|
||||
key_aliases: &'a HashMap<Fingerprint, String>,
|
||||
currently_signing: bool,
|
||||
) -> Element<'a, Message> {
|
||||
Column::new()
|
||||
.spacing(20)
|
||||
@ -343,14 +358,22 @@ pub fn spend_overview_view<'a>(
|
||||
Some(icon::backup_icon()),
|
||||
"Export",
|
||||
)
|
||||
.on_press(Message::ExportPsbt),
|
||||
.on_press_maybe(if currently_signing {
|
||||
None
|
||||
} else {
|
||||
Some(Message::ExportPsbt)
|
||||
}),
|
||||
)
|
||||
.push(
|
||||
button::secondary(
|
||||
Some(icon::restore_icon()),
|
||||
"Import",
|
||||
)
|
||||
.on_press(Message::ImportPsbt),
|
||||
.on_press_maybe(if currently_signing {
|
||||
None
|
||||
} else {
|
||||
Some(Message::ImportPsbt)
|
||||
}),
|
||||
),
|
||||
)
|
||||
.align_y(Alignment::Center),
|
||||
|
||||
@ -37,6 +37,7 @@ pub fn spend_view<'a>(
|
||||
key_aliases: &'a HashMap<Fingerprint, String>,
|
||||
labels_editing: &'a HashMap<String, form::Value<String>>,
|
||||
network: Network,
|
||||
currently_signing: bool,
|
||||
warning: Option<&Error>,
|
||||
) -> Element<'a, Message> {
|
||||
let is_recovery = tx
|
||||
@ -75,7 +76,12 @@ pub fn spend_view<'a>(
|
||||
},
|
||||
))
|
||||
})
|
||||
.push(psbt::spend_overview_view(tx, desc_info, key_aliases))
|
||||
.push(psbt::spend_overview_view(
|
||||
tx,
|
||||
desc_info,
|
||||
key_aliases,
|
||||
currently_signing,
|
||||
))
|
||||
.push(
|
||||
Column::new()
|
||||
.spacing(20)
|
||||
@ -99,7 +105,11 @@ pub fn spend_view<'a>(
|
||||
.push(
|
||||
button::secondary(None, "Delete")
|
||||
.width(Length::Fixed(200.0))
|
||||
.on_press(Message::Spend(SpendTxMessage::Delete)),
|
||||
.on_press_maybe(if currently_signing {
|
||||
None
|
||||
} else {
|
||||
Some(Message::Spend(SpendTxMessage::Delete))
|
||||
}),
|
||||
)
|
||||
.width(Length::Fill)
|
||||
} else {
|
||||
@ -107,13 +117,21 @@ pub fn spend_view<'a>(
|
||||
.push(
|
||||
button::secondary(None, "< Previous")
|
||||
.width(Length::Fixed(150.0))
|
||||
.on_press(Message::Previous),
|
||||
.on_press_maybe(if currently_signing {
|
||||
None
|
||||
} else {
|
||||
Some(Message::Previous)
|
||||
}),
|
||||
)
|
||||
.push(Space::with_width(Length::Fill))
|
||||
.push(
|
||||
button::secondary(None, "Save")
|
||||
.width(Length::Fixed(150.0))
|
||||
.on_press(Message::Spend(SpendTxMessage::Save)),
|
||||
.on_press_maybe(if currently_signing {
|
||||
None
|
||||
} else {
|
||||
Some(Message::Spend(SpendTxMessage::Save))
|
||||
}),
|
||||
)
|
||||
.width(Length::Fill)
|
||||
}),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user