export: make ExportModal::view() generic

This commit is contained in:
pythcoiner 2025-03-11 20:59:27 +01:00
parent 5dcecc5542
commit b0e560c0b5
No known key found for this signature in database
GPG Key ID: C1048AEEDF303B88
4 changed files with 34 additions and 6 deletions

View File

@ -8,7 +8,7 @@ use liana_ui::{component::modal::Modal, widget::Element};
use tokio::task::JoinHandle;
use crate::{
app::view::{self, export::export_modal},
app::view::{export::export_modal, Close},
daemon::Daemon,
export::{self, get_path, ImportExportMessage, ImportExportState, ImportExportType, Progress},
};
@ -129,7 +129,11 @@ impl ExportModal {
}
Task::none()
}
pub fn view<'a>(&'a self, content: Element<'a, view::Message>) -> Element<view::Message> {
pub fn view<'a, M>(&'a self, content: Element<'a, M>) -> Element<M>
where
M: 'a + Close + Clone + From<export::ImportExportMessage>,
{
let modal = Modal::new(
content,
export_modal(&self.state, self.error.as_ref(), self.modal_title()),
@ -138,7 +142,7 @@ impl ExportModal {
ImportExportState::TimedOut
| ImportExportState::Aborted
| ImportExportState::Ended
| ImportExportState::Closed => modal.on_blur(Some(view::Message::Close)),
| ImportExportState::Closed => modal.on_blur(Some(M::close())),
_ => modal,
}
.into()

View File

@ -11,11 +11,10 @@ use liana_ui::{
widget::Element,
};
use crate::export::{Error, ImportExportMessage};
use crate::{app::view::message::Message, export::ImportExportState};
use crate::export::{Error, ImportExportMessage, ImportExportState};
/// Return the modal view for an export task
pub fn export_modal<'a>(
pub fn export_modal<'a, Message: From<ImportExportMessage> + Clone + 'a>(
state: &ImportExportState,
error: Option<&'a Error>,
export_type: &str,

View File

@ -1,6 +1,10 @@
use crate::{app::menu::Menu, export::ImportExportMessage, node::bitcoind::RpcAuthType};
use liana::miniscript::bitcoin::{bip32::Fingerprint, OutPoint};
pub trait Close {
fn close() -> Self;
}
#[derive(Debug, Clone)]
pub enum Message {
Reload,
@ -22,6 +26,12 @@ pub enum Message {
ImportExport(ImportExportMessage),
}
impl Close for Message {
fn close() -> Self {
Self::Close
}
}
#[derive(Debug, Clone)]
pub enum LabelMessage {
Edited(String),

View File

@ -7,7 +7,9 @@ use std::path::PathBuf;
use super::{context, Error};
use crate::{
app::settings::ProviderKey,
app::view::Close,
download::{DownloadError, Progress},
export::ImportExportMessage,
hw::HardwareWalletMessage,
installer::descriptor::{Key, PathKind},
lianalite::client::{auth::AuthClient, backend::api},
@ -49,6 +51,19 @@ pub enum Message {
RedeemNextKey,
KeyRedeemed(ProviderKey, Result<(), services::Error>),
AllKeysRedeemed,
ImportExport(ImportExportMessage),
}
impl Close for Message {
fn close() -> Self {
Self::Close
}
}
impl From<ImportExportMessage> for Message {
fn from(value: ImportExportMessage) -> Self {
Self::ImportExport(value)
}
}
#[derive(Debug, Clone)]