don't show zap button if no wallet
Signed-off-by: kernelkind <kernelkind@gmail.com>
This commit is contained in:
@@ -84,8 +84,8 @@ impl<'a> FilledKeypair<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> From<FilledKeypair<'a>> for KeypairUnowned<'a> {
|
impl<'a> From<&'a FilledKeypair<'a>> for KeypairUnowned<'a> {
|
||||||
fn from(value: FilledKeypair<'a>) -> Self {
|
fn from(value: &'a FilledKeypair<'a>) -> Self {
|
||||||
Self {
|
Self {
|
||||||
pubkey: value.pubkey,
|
pubkey: value.pubkey,
|
||||||
secret_key: Some(value.secret_key),
|
secret_key: Some(value.secret_key),
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ pub struct NoteContext<'d> {
|
|||||||
pub zaps: &'d mut Zaps,
|
pub zaps: &'d mut Zaps,
|
||||||
pub pool: &'d mut RelayPool,
|
pub pool: &'d mut RelayPool,
|
||||||
pub job_pool: &'d mut JobPool,
|
pub job_pool: &'d mut JobPool,
|
||||||
|
pub current_account_has_wallet: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)]
|
#[derive(Debug, Eq, PartialEq, Copy, Clone, Hash)]
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ use crate::{
|
|||||||
|
|
||||||
use egui_nav::{Nav, NavAction, NavResponse, NavUiType};
|
use egui_nav::{Nav, NavAction, NavResponse, NavUiType};
|
||||||
use nostrdb::Transaction;
|
use nostrdb::Transaction;
|
||||||
use notedeck::{AccountsAction, AppContext, NoteAction, NoteContext};
|
use notedeck::{get_current_wallet, AccountsAction, AppContext, NoteAction, NoteContext};
|
||||||
use notedeck_ui::View;
|
use notedeck_ui::View;
|
||||||
use tracing::error;
|
use tracing::error;
|
||||||
|
|
||||||
@@ -277,6 +277,7 @@ fn render_nav_body(
|
|||||||
zaps: ctx.zaps,
|
zaps: ctx.zaps,
|
||||||
pool: ctx.pool,
|
pool: ctx.pool,
|
||||||
job_pool: ctx.job_pool,
|
job_pool: ctx.job_pool,
|
||||||
|
current_account_has_wallet: get_current_wallet(ctx.accounts, ctx.global_wallet).is_some(),
|
||||||
};
|
};
|
||||||
match top {
|
match top {
|
||||||
Route::Timeline(kind) => render_timeline_route(
|
Route::Timeline(kind) => render_timeline_route(
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ use egui::{
|
|||||||
widgets::text_edit::TextEdit,
|
widgets::text_edit::TextEdit,
|
||||||
Frame, Layout, Margin, Pos2, ScrollArea, Sense, TextBuffer,
|
Frame, Layout, Margin, Pos2, ScrollArea, Sense, TextBuffer,
|
||||||
};
|
};
|
||||||
use enostr::{FilledKeypair, FullKeypair, NoteId, Pubkey, RelayPool};
|
use enostr::{FilledKeypair, FullKeypair, KeypairUnowned, NoteId, Pubkey, RelayPool};
|
||||||
use nostrdb::{Ndb, Transaction};
|
use nostrdb::{Ndb, Transaction};
|
||||||
use notedeck_ui::blur::PixelDimensions;
|
use notedeck_ui::blur::PixelDimensions;
|
||||||
use notedeck_ui::images::{get_render_state, RenderState};
|
use notedeck_ui::images::{get_render_state, RenderState};
|
||||||
@@ -341,10 +341,16 @@ impl<'a, 'd> PostView<'a, 'd> {
|
|||||||
.show(ui, |ui| {
|
.show(ui, |ui| {
|
||||||
ui.vertical(|ui| {
|
ui.vertical(|ui| {
|
||||||
ui.set_max_width(avail_size.x * 0.8);
|
ui.set_max_width(avail_size.x * 0.8);
|
||||||
|
|
||||||
|
let zapping_acc = self
|
||||||
|
.note_context
|
||||||
|
.current_account_has_wallet
|
||||||
|
.then(|| KeypairUnowned::from(&self.poster));
|
||||||
|
|
||||||
render_note_preview(
|
render_note_preview(
|
||||||
ui,
|
ui,
|
||||||
self.note_context,
|
self.note_context,
|
||||||
&Some(self.poster.into()),
|
zapping_acc.as_ref(),
|
||||||
txn,
|
txn,
|
||||||
id.bytes(),
|
id.bytes(),
|
||||||
nostrdb::NoteKey::new(0),
|
nostrdb::NoteKey::new(0),
|
||||||
@@ -778,6 +784,7 @@ mod preview {
|
|||||||
zaps: app.zaps,
|
zaps: app.zaps,
|
||||||
pool: app.pool,
|
pool: app.pool,
|
||||||
job_pool: app.job_pool,
|
job_pool: app.job_pool,
|
||||||
|
current_account_has_wallet: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
PostView::new(
|
PostView::new(
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ use crate::ui::{
|
|||||||
note::{PostAction, PostResponse, PostType},
|
note::{PostAction, PostResponse, PostType},
|
||||||
};
|
};
|
||||||
|
|
||||||
use enostr::{FilledKeypair, NoteId};
|
use enostr::{FilledKeypair, KeypairUnowned, NoteId};
|
||||||
use notedeck::NoteContext;
|
use notedeck::NoteContext;
|
||||||
use notedeck_ui::jobs::JobsCache;
|
use notedeck_ui::jobs::JobsCache;
|
||||||
use notedeck_ui::{NoteOptions, NoteView, ProfilePic};
|
use notedeck_ui::{NoteOptions, NoteView, ProfilePic};
|
||||||
@@ -67,12 +67,17 @@ impl<'a, 'd> PostReplyView<'a, 'd> {
|
|||||||
let note_offset: i8 =
|
let note_offset: i8 =
|
||||||
pfp_offset - ProfilePic::medium_size() / 2 - NoteView::expand_size() / 2;
|
pfp_offset - ProfilePic::medium_size() / 2 - NoteView::expand_size() / 2;
|
||||||
|
|
||||||
|
let zapping_acc = self
|
||||||
|
.note_context
|
||||||
|
.current_account_has_wallet
|
||||||
|
.then(|| KeypairUnowned::from(&self.poster));
|
||||||
|
|
||||||
let quoted_note = egui::Frame::NONE
|
let quoted_note = egui::Frame::NONE
|
||||||
.outer_margin(egui::Margin::same(note_offset))
|
.outer_margin(egui::Margin::same(note_offset))
|
||||||
.show(ui, |ui| {
|
.show(ui, |ui| {
|
||||||
NoteView::new(
|
NoteView::new(
|
||||||
self.note_context,
|
self.note_context,
|
||||||
&Some(self.poster.into()),
|
zapping_acc.as_ref(),
|
||||||
self.note,
|
self.note,
|
||||||
self.note_options,
|
self.note_options,
|
||||||
self.jobs,
|
self.jobs,
|
||||||
|
|||||||
@@ -399,10 +399,15 @@ impl<'a, 'd> TimelineTabView<'a, 'd> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if !muted {
|
if !muted {
|
||||||
|
let zapping_acc = self
|
||||||
|
.cur_acc
|
||||||
|
.as_ref()
|
||||||
|
.filter(|_| self.note_context.current_account_has_wallet);
|
||||||
|
|
||||||
notedeck_ui::padding(8.0, ui, |ui| {
|
notedeck_ui::padding(8.0, ui, |ui| {
|
||||||
let resp = NoteView::new(
|
let resp = NoteView::new(
|
||||||
self.note_context,
|
self.note_context,
|
||||||
self.cur_acc,
|
zapping_acc,
|
||||||
¬e,
|
¬e,
|
||||||
self.note_options,
|
self.note_options,
|
||||||
self.jobs,
|
self.jobs,
|
||||||
|
|||||||
@@ -229,6 +229,7 @@ impl<'a> DaveUi<'a> {
|
|||||||
zaps: ctx.zaps,
|
zaps: ctx.zaps,
|
||||||
pool: ctx.pool,
|
pool: ctx.pool,
|
||||||
job_pool: ctx.job_pool,
|
job_pool: ctx.job_pool,
|
||||||
|
current_account_has_wallet: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
let txn = Transaction::new(note_context.ndb).unwrap();
|
let txn = Transaction::new(note_context.ndb).unwrap();
|
||||||
@@ -253,7 +254,7 @@ impl<'a> DaveUi<'a> {
|
|||||||
|ui| {
|
|ui| {
|
||||||
notedeck_ui::NoteView::new(
|
notedeck_ui::NoteView::new(
|
||||||
&mut note_context,
|
&mut note_context,
|
||||||
&None,
|
None,
|
||||||
¬e,
|
¬e,
|
||||||
NoteOptions::default(),
|
NoteOptions::default(),
|
||||||
jobs,
|
jobs,
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ use super::media::{find_renderable_media, image_carousel, RenderableMedia};
|
|||||||
|
|
||||||
pub struct NoteContents<'a, 'd> {
|
pub struct NoteContents<'a, 'd> {
|
||||||
note_context: &'a mut NoteContext<'d>,
|
note_context: &'a mut NoteContext<'d>,
|
||||||
cur_acc: &'a Option<KeypairUnowned<'a>>,
|
cur_acc: Option<&'a KeypairUnowned<'a>>,
|
||||||
txn: &'a Transaction,
|
txn: &'a Transaction,
|
||||||
note: &'a Note<'a>,
|
note: &'a Note<'a>,
|
||||||
options: NoteOptions,
|
options: NoteOptions,
|
||||||
@@ -30,7 +30,7 @@ impl<'a, 'd> NoteContents<'a, 'd> {
|
|||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
pub fn new(
|
pub fn new(
|
||||||
note_context: &'a mut NoteContext<'d>,
|
note_context: &'a mut NoteContext<'d>,
|
||||||
cur_acc: &'a Option<KeypairUnowned<'a>>,
|
cur_acc: Option<&'a KeypairUnowned<'a>>,
|
||||||
txn: &'a Transaction,
|
txn: &'a Transaction,
|
||||||
note: &'a Note,
|
note: &'a Note,
|
||||||
options: NoteOptions,
|
options: NoteOptions,
|
||||||
@@ -71,7 +71,7 @@ impl egui::Widget for &mut NoteContents<'_, '_> {
|
|||||||
pub fn render_note_preview(
|
pub fn render_note_preview(
|
||||||
ui: &mut egui::Ui,
|
ui: &mut egui::Ui,
|
||||||
note_context: &mut NoteContext,
|
note_context: &mut NoteContext,
|
||||||
cur_acc: &Option<KeypairUnowned>,
|
cur_acc: Option<&KeypairUnowned>,
|
||||||
txn: &Transaction,
|
txn: &Transaction,
|
||||||
id: &[u8; 32],
|
id: &[u8; 32],
|
||||||
parent: NoteKey,
|
parent: NoteKey,
|
||||||
@@ -112,7 +112,7 @@ pub fn render_note_preview(
|
|||||||
pub fn render_note_contents(
|
pub fn render_note_contents(
|
||||||
ui: &mut egui::Ui,
|
ui: &mut egui::Ui,
|
||||||
note_context: &mut NoteContext,
|
note_context: &mut NoteContext,
|
||||||
cur_acc: &Option<KeypairUnowned>,
|
cur_acc: Option<&KeypairUnowned>,
|
||||||
txn: &Transaction,
|
txn: &Transaction,
|
||||||
note: &Note,
|
note: &Note,
|
||||||
options: NoteOptions,
|
options: NoteOptions,
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ use notedeck::{
|
|||||||
|
|
||||||
pub struct NoteView<'a, 'd> {
|
pub struct NoteView<'a, 'd> {
|
||||||
note_context: &'a mut NoteContext<'d>,
|
note_context: &'a mut NoteContext<'d>,
|
||||||
cur_acc: &'a Option<KeypairUnowned<'a>>,
|
zapping_acc: Option<&'a KeypairUnowned<'a>>,
|
||||||
parent: Option<NoteKey>,
|
parent: Option<NoteKey>,
|
||||||
note: &'a nostrdb::Note<'a>,
|
note: &'a nostrdb::Note<'a>,
|
||||||
framed: bool,
|
framed: bool,
|
||||||
@@ -74,7 +74,7 @@ impl egui::Widget for &mut NoteView<'_, '_> {
|
|||||||
impl<'a, 'd> NoteView<'a, 'd> {
|
impl<'a, 'd> NoteView<'a, 'd> {
|
||||||
pub fn new(
|
pub fn new(
|
||||||
note_context: &'a mut NoteContext<'d>,
|
note_context: &'a mut NoteContext<'d>,
|
||||||
cur_acc: &'a Option<KeypairUnowned<'a>>,
|
zapping_acc: Option<&'a KeypairUnowned<'a>>,
|
||||||
note: &'a nostrdb::Note<'a>,
|
note: &'a nostrdb::Note<'a>,
|
||||||
mut flags: NoteOptions,
|
mut flags: NoteOptions,
|
||||||
jobs: &'a mut JobsCache,
|
jobs: &'a mut JobsCache,
|
||||||
@@ -87,7 +87,7 @@ impl<'a, 'd> NoteView<'a, 'd> {
|
|||||||
|
|
||||||
Self {
|
Self {
|
||||||
note_context,
|
note_context,
|
||||||
cur_acc,
|
zapping_acc,
|
||||||
parent,
|
parent,
|
||||||
note,
|
note,
|
||||||
flags,
|
flags,
|
||||||
@@ -214,7 +214,7 @@ impl<'a, 'd> NoteView<'a, 'd> {
|
|||||||
|
|
||||||
ui.add(&mut NoteContents::new(
|
ui.add(&mut NoteContents::new(
|
||||||
self.note_context,
|
self.note_context,
|
||||||
self.cur_acc,
|
self.zapping_acc,
|
||||||
txn,
|
txn,
|
||||||
self.note,
|
self.note,
|
||||||
self.flags,
|
self.flags,
|
||||||
@@ -338,7 +338,7 @@ impl<'a, 'd> NoteView<'a, 'd> {
|
|||||||
});
|
});
|
||||||
NoteView::new(
|
NoteView::new(
|
||||||
self.note_context,
|
self.note_context,
|
||||||
self.cur_acc,
|
self.zapping_acc,
|
||||||
¬e_to_repost,
|
¬e_to_repost,
|
||||||
self.flags,
|
self.flags,
|
||||||
self.jobs,
|
self.jobs,
|
||||||
@@ -441,7 +441,7 @@ impl<'a, 'd> NoteView<'a, 'd> {
|
|||||||
.horizontal(|ui| {
|
.horizontal(|ui| {
|
||||||
reply_desc(
|
reply_desc(
|
||||||
ui,
|
ui,
|
||||||
self.cur_acc,
|
self.zapping_acc,
|
||||||
txn,
|
txn,
|
||||||
¬e_reply,
|
¬e_reply,
|
||||||
self.note_context,
|
self.note_context,
|
||||||
@@ -460,7 +460,7 @@ impl<'a, 'd> NoteView<'a, 'd> {
|
|||||||
|
|
||||||
let mut contents = NoteContents::new(
|
let mut contents = NoteContents::new(
|
||||||
self.note_context,
|
self.note_context,
|
||||||
self.cur_acc,
|
self.zapping_acc,
|
||||||
txn,
|
txn,
|
||||||
self.note,
|
self.note,
|
||||||
self.flags,
|
self.flags,
|
||||||
@@ -476,8 +476,10 @@ impl<'a, 'd> NoteView<'a, 'd> {
|
|||||||
if self.options().has_actionbar() {
|
if self.options().has_actionbar() {
|
||||||
if let Some(action) = render_note_actionbar(
|
if let Some(action) = render_note_actionbar(
|
||||||
ui,
|
ui,
|
||||||
self.note_context.zaps,
|
self.zapping_acc.as_ref().map(|c| Zapper {
|
||||||
self.cur_acc.as_ref(),
|
zaps: self.note_context.zaps,
|
||||||
|
cur_acc: c,
|
||||||
|
}),
|
||||||
self.note.id(),
|
self.note.id(),
|
||||||
self.note.pubkey(),
|
self.note.pubkey(),
|
||||||
note_key,
|
note_key,
|
||||||
@@ -514,7 +516,7 @@ impl<'a, 'd> NoteView<'a, 'd> {
|
|||||||
if note_reply.reply().is_some() {
|
if note_reply.reply().is_some() {
|
||||||
let action = reply_desc(
|
let action = reply_desc(
|
||||||
ui,
|
ui,
|
||||||
self.cur_acc,
|
self.zapping_acc,
|
||||||
txn,
|
txn,
|
||||||
¬e_reply,
|
¬e_reply,
|
||||||
self.note_context,
|
self.note_context,
|
||||||
@@ -530,7 +532,7 @@ impl<'a, 'd> NoteView<'a, 'd> {
|
|||||||
|
|
||||||
let mut contents = NoteContents::new(
|
let mut contents = NoteContents::new(
|
||||||
self.note_context,
|
self.note_context,
|
||||||
self.cur_acc,
|
self.zapping_acc,
|
||||||
txn,
|
txn,
|
||||||
self.note,
|
self.note,
|
||||||
self.flags,
|
self.flags,
|
||||||
@@ -545,8 +547,10 @@ impl<'a, 'd> NoteView<'a, 'd> {
|
|||||||
if self.options().has_actionbar() {
|
if self.options().has_actionbar() {
|
||||||
if let Some(action) = render_note_actionbar(
|
if let Some(action) = render_note_actionbar(
|
||||||
ui,
|
ui,
|
||||||
self.note_context.zaps,
|
self.zapping_acc.as_ref().map(|c| Zapper {
|
||||||
self.cur_acc.as_ref(),
|
zaps: self.note_context.zaps,
|
||||||
|
cur_acc: c,
|
||||||
|
}),
|
||||||
self.note.id(),
|
self.note.id(),
|
||||||
self.note.pubkey(),
|
self.note.pubkey(),
|
||||||
note_key,
|
note_key,
|
||||||
@@ -657,11 +661,15 @@ fn note_hitbox_clicked(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct Zapper<'a> {
|
||||||
|
zaps: &'a Zaps,
|
||||||
|
cur_acc: &'a KeypairUnowned<'a>,
|
||||||
|
}
|
||||||
|
|
||||||
#[profiling::function]
|
#[profiling::function]
|
||||||
fn render_note_actionbar(
|
fn render_note_actionbar(
|
||||||
ui: &mut egui::Ui,
|
ui: &mut egui::Ui,
|
||||||
zaps: &Zaps,
|
zapper: Option<Zapper>,
|
||||||
cur_acc: Option<&KeypairUnowned>,
|
|
||||||
note_id: &[u8; 32],
|
note_id: &[u8; 32],
|
||||||
note_pubkey: &[u8; 32],
|
note_pubkey: &[u8; 32],
|
||||||
note_key: NoteKey,
|
note_key: NoteKey,
|
||||||
@@ -670,29 +678,7 @@ fn render_note_actionbar(
|
|||||||
let reply_resp = reply_button(ui, note_key);
|
let reply_resp = reply_button(ui, note_key);
|
||||||
let quote_resp = quote_repost_button(ui, note_key);
|
let quote_resp = quote_repost_button(ui, note_key);
|
||||||
|
|
||||||
let zap_target = ZapTarget::Note(NoteZapTarget {
|
|
||||||
note_id,
|
|
||||||
zap_recipient: note_pubkey,
|
|
||||||
});
|
|
||||||
|
|
||||||
let zap_state = cur_acc.map_or_else(
|
|
||||||
|| Ok(AnyZapState::None),
|
|
||||||
|kp| zaps.any_zap_state_for(kp.pubkey.bytes(), zap_target),
|
|
||||||
);
|
|
||||||
let zap_resp = cur_acc
|
|
||||||
.filter(|k| k.secret_key.is_some())
|
|
||||||
.map(|_| match &zap_state {
|
|
||||||
Ok(any_zap_state) => ui.add(zap_button(any_zap_state.clone(), note_id)),
|
|
||||||
Err(zapping_error) => {
|
|
||||||
let (rect, _) =
|
|
||||||
ui.allocate_at_least(egui::vec2(10.0, 10.0), egui::Sense::click());
|
|
||||||
ui.add(x_button(rect))
|
|
||||||
.on_hover_text(format!("{zapping_error}"))
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let to_noteid = |id: &[u8; 32]| NoteId::new(*id);
|
let to_noteid = |id: &[u8; 32]| NoteId::new(*id);
|
||||||
|
|
||||||
if reply_resp.clicked() {
|
if reply_resp.clicked() {
|
||||||
break 's Some(NoteAction::Reply(to_noteid(note_id)));
|
break 's Some(NoteAction::Reply(to_noteid(note_id)));
|
||||||
} else if reply_resp.hovered() {
|
} else if reply_resp.hovered() {
|
||||||
@@ -705,17 +691,16 @@ fn render_note_actionbar(
|
|||||||
crate::show_pointer(ui);
|
crate::show_pointer(ui);
|
||||||
}
|
}
|
||||||
|
|
||||||
let Some(zap_resp) = zap_resp else {
|
let Some(Zapper { zaps, cur_acc }) = zapper else {
|
||||||
break 's None;
|
break 's None;
|
||||||
};
|
};
|
||||||
|
|
||||||
if zap_resp.hovered() {
|
let zap_target = ZapTarget::Note(NoteZapTarget {
|
||||||
crate::show_pointer(ui);
|
note_id,
|
||||||
}
|
zap_recipient: note_pubkey,
|
||||||
|
});
|
||||||
|
|
||||||
if !zap_resp.clicked() {
|
let zap_state = zaps.any_zap_state_for(cur_acc.pubkey.bytes(), zap_target);
|
||||||
break 's None;
|
|
||||||
}
|
|
||||||
|
|
||||||
let target = NoteZapTargetOwned {
|
let target = NoteZapTargetOwned {
|
||||||
note_id: to_noteid(note_id),
|
note_id: to_noteid(note_id),
|
||||||
@@ -726,6 +711,27 @@ fn render_note_actionbar(
|
|||||||
break 's Some(NoteAction::Zap(ZapAction::ClearError(target)));
|
break 's Some(NoteAction::Zap(ZapAction::ClearError(target)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let zap_resp = {
|
||||||
|
cur_acc.secret_key.as_ref()?;
|
||||||
|
|
||||||
|
match zap_state {
|
||||||
|
Ok(any_zap_state) => ui.add(zap_button(any_zap_state, note_id)),
|
||||||
|
Err(err) => {
|
||||||
|
let (rect, _) =
|
||||||
|
ui.allocate_at_least(egui::vec2(10.0, 10.0), egui::Sense::click());
|
||||||
|
ui.add(x_button(rect)).on_hover_text(err.to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
if zap_resp.hovered() {
|
||||||
|
crate::show_pointer(ui);
|
||||||
|
}
|
||||||
|
|
||||||
|
if !zap_resp.clicked() {
|
||||||
|
break 's None;
|
||||||
|
}
|
||||||
|
|
||||||
Some(NoteAction::Zap(ZapAction::Send(ZapTargetAmount {
|
Some(NoteAction::Zap(ZapAction::Send(ZapTargetAmount {
|
||||||
target,
|
target,
|
||||||
specified_msats: None,
|
specified_msats: None,
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ use notedeck::{NoteAction, NoteContext};
|
|||||||
#[profiling::function]
|
#[profiling::function]
|
||||||
pub fn reply_desc(
|
pub fn reply_desc(
|
||||||
ui: &mut egui::Ui,
|
ui: &mut egui::Ui,
|
||||||
cur_acc: &Option<KeypairUnowned>,
|
cur_acc: Option<&KeypairUnowned>,
|
||||||
txn: &Transaction,
|
txn: &Transaction,
|
||||||
note_reply: &NoteReply,
|
note_reply: &NoteReply,
|
||||||
note_context: &mut NoteContext,
|
note_context: &mut NoteContext,
|
||||||
|
|||||||
Reference in New Issue
Block a user