diff --git a/src/components/joined.rs b/src/components/joined.rs index 6cc8cbe..aead27e 100644 --- a/src/components/joined.rs +++ b/src/components/joined.rs @@ -2,15 +2,6 @@ use leptos::*; use crate::components::{Balance, Receive, ReceiveLn, Send, TxList}; use crate::context::ClientContext; -use crate::utils::empty_view; - -#[derive(Clone, PartialEq)] -enum Tab { - TxList, - Send, - ReceiveLn, - Receive, -} // // Joined component @@ -37,101 +28,88 @@ pub fn Joined() -> impl IntoView { .unwrap_or_else(|| "Loading...".into()) }; - let (tab, set_tab) = create_signal(Tab::Receive); + let tab_change_signal = create_rw_signal(()); + + let menu_items = vec![ + MenuItem { + title: "Transactions".into(), + view: view! { }, + }, + MenuItem { + title: "Redeem".into(), + view: view! { }, + }, + MenuItem { + title: "LN Send".into(), + view: view! { }, + }, + MenuItem { + title: "LN Receive".into(), + view: view! { }, + }, + ]; view! { -

{federation_label}

- -
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
  • - -
  • -
+struct MenuItem { + title: String, + view: View, +} + +#[component] +fn Menu( + items: Vec, + on_tab_change: F, + #[prop(default = 0)] initial_item: usize, +) -> impl IntoView +where + F: Fn() + Copy + 'static, +{ + let (tab, set_tab) = create_signal(initial_item); - - - - - - - - - - - - + view! { +
    + { + items.iter().enumerate().map(|(i, item)| { + view! { +
  • + +
  • + } + }).collect_view() + } +
+ { + items.iter().enumerate().map(|(i, item)| { + let view = item.view.to_owned(); + view! { + + { view.to_owned() } + + } + }).collect_view() + } } } diff --git a/src/components/tx_list.rs b/src/components/tx_list.rs index c6a90a3..c45b7cd 100644 --- a/src/components/tx_list.rs +++ b/src/components/tx_list.rs @@ -14,9 +14,20 @@ where { let ClientContext { client, .. } = expect_context::(); - let tx_list_resource = create_resource(update_signal, move |()| async move { - let client = client.get_value(); - client.list_transactions().await.expect("list tx failed") + let tx_list_resource = create_resource( + || (), + move |()| async move { + let client = client.get_value(); + client.list_transactions().await.expect("list tx failed") + }, + ); + + create_effect(move |p| { + update_signal(); + + if matches!(p, Some(_)) { + tx_list_resource.refetch() + } }); view! {