gui: integrate PSBT export instead copy to clipboard
This commit is contained in:
parent
64fcf34154
commit
0796efae19
@ -8,7 +8,10 @@ use liana_ui::{component::modal::Modal, widget::Element};
|
||||
use tokio::task::JoinHandle;
|
||||
|
||||
use crate::{
|
||||
app::view::{export::export_modal, Close},
|
||||
app::{
|
||||
self,
|
||||
view::{export::export_modal, Close},
|
||||
},
|
||||
daemon::Daemon,
|
||||
export::{self, get_path, ImportExportMessage, ImportExportState, ImportExportType, Progress},
|
||||
};
|
||||
@ -23,6 +26,34 @@ pub struct ExportModal {
|
||||
import_export_type: ImportExportType,
|
||||
}
|
||||
|
||||
impl app::state::psbt::Modal for ExportModal {
|
||||
fn subscription(&self) -> Subscription<app::Message> {
|
||||
self.subscription()
|
||||
.map(|s| s.map(|m| app::Message::Export(ImportExportMessage::Progress(m))))
|
||||
.unwrap_or(Subscription::none())
|
||||
}
|
||||
|
||||
fn update(
|
||||
&mut self,
|
||||
_daemon: Arc<dyn Daemon + Sync + Send>,
|
||||
message: app::Message,
|
||||
_tx: &mut crate::daemon::model::SpendTx,
|
||||
) -> Task<app::Message> {
|
||||
if let app::Message::Export(m) = message {
|
||||
self.update(m)
|
||||
} else {
|
||||
Task::none()
|
||||
}
|
||||
}
|
||||
|
||||
fn view<'a>(
|
||||
&'a self,
|
||||
content: Element<'a, app::view::Message>,
|
||||
) -> Element<'a, app::view::Message> {
|
||||
self.view(content)
|
||||
}
|
||||
}
|
||||
|
||||
impl ExportModal {
|
||||
#[allow(clippy::new_without_default)]
|
||||
pub fn new(
|
||||
|
||||
@ -19,6 +19,7 @@ use liana_ui::{
|
||||
};
|
||||
|
||||
use crate::daemon::model::LabelsLoader;
|
||||
use crate::export::{ImportExportMessage, ImportExportType};
|
||||
use crate::{
|
||||
app::{
|
||||
cache::Cache,
|
||||
@ -35,6 +36,8 @@ use crate::{
|
||||
hw::{HardwareWallet, HardwareWallets},
|
||||
};
|
||||
|
||||
use super::export::ExportModal;
|
||||
|
||||
pub trait Modal {
|
||||
fn load(&self, _daemon: Arc<dyn Daemon + Sync + Send>) -> Task<Message> {
|
||||
Task::none()
|
||||
@ -59,6 +62,7 @@ pub enum PsbtModal {
|
||||
Update(UpdateModal),
|
||||
Broadcast(BroadcastModal),
|
||||
Delete(DeleteModal),
|
||||
Export(ExportModal),
|
||||
}
|
||||
|
||||
impl<'a> AsRef<dyn Modal + 'a> for PsbtModal {
|
||||
@ -69,6 +73,7 @@ impl<'a> AsRef<dyn Modal + 'a> for PsbtModal {
|
||||
Self::Update(a) => a,
|
||||
Self::Broadcast(a) => a,
|
||||
Self::Delete(a) => a,
|
||||
Self::Export(a) => a,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -81,6 +86,7 @@ impl<'a> AsMut<dyn Modal + 'a> for PsbtModal {
|
||||
Self::Update(a) => a,
|
||||
Self::Broadcast(a) => a,
|
||||
Self::Delete(a) => a,
|
||||
Self::Export(a) => a,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -135,6 +141,25 @@ impl PsbtState {
|
||||
message: Message,
|
||||
) -> Task<Message> {
|
||||
match message {
|
||||
Message::View(view::Message::ExportPsbt) => {
|
||||
if self.modal.is_none() {
|
||||
let psbt_str = self.tx.psbt.to_string();
|
||||
let modal = ExportModal::new(None, ImportExportType::ExportPsbt(psbt_str));
|
||||
let launch = modal.launch(true);
|
||||
self.modal = Some(PsbtModal::Export(modal));
|
||||
return launch;
|
||||
}
|
||||
}
|
||||
Message::View(view::Message::ImportExport(ImportExportMessage::Close)) => {
|
||||
if matches!(self.modal, Some(PsbtModal::Export(_))) {
|
||||
self.modal = None;
|
||||
}
|
||||
}
|
||||
Message::View(view::Message::ImportExport(m)) => {
|
||||
if let Some(PsbtModal::Export(modal)) = self.modal.as_mut() {
|
||||
return modal.update(m);
|
||||
}
|
||||
}
|
||||
Message::View(view::Message::Spend(view::SpendTxMessage::Cancel)) => {
|
||||
if let Some(PsbtModal::Sign(SignModal { display_modal, .. })) = &mut self.modal {
|
||||
*display_modal = false;
|
||||
|
||||
@ -25,6 +25,7 @@ pub enum Message {
|
||||
ShowQrCode(usize),
|
||||
ImportExport(ImportExportMessage),
|
||||
HideRescanWarning,
|
||||
ExportPsbt,
|
||||
}
|
||||
|
||||
impl Close for Message {
|
||||
|
||||
@ -339,10 +339,10 @@ pub fn spend_overview_view<'a>(
|
||||
.spacing(5)
|
||||
.push(
|
||||
button::secondary(
|
||||
Some(icon::clipboard_icon()),
|
||||
"Copy",
|
||||
Some(icon::backup_icon()),
|
||||
"Export",
|
||||
)
|
||||
.on_press(Message::Clipboard(tx.psbt.to_string())),
|
||||
.on_press(Message::ExportPsbt),
|
||||
)
|
||||
.push(
|
||||
button::secondary(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user