account_management: refactor

Signed-off-by: kernelkind <kernelkind@gmail.com>
Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
kernelkind
2024-05-17 11:47:44 -04:00
committed by William Casarin
parent 88a3a2d088
commit fd943e5f9f

View File

@@ -6,7 +6,9 @@ use crate::{
}; };
use egui::{Align, Button, Frame, Id, Layout, Margin, RichText, ScrollArea, Sense, Vec2}; use egui::{Align, Button, Frame, Id, Layout, Margin, RichText, ScrollArea, Sense, Vec2};
use super::global_popup::GlobalPopupType;
use super::persist_state::PERSISTED_ACCOUNT_MANAGEMENT; use super::persist_state::PERSISTED_ACCOUNT_MANAGEMENT;
use super::profile::preview::SimpleProfilePreview;
pub struct AccountManagementView<'a> { pub struct AccountManagementView<'a> {
account_manager: AccountManager<'a>, account_manager: AccountManager<'a>,
@@ -37,88 +39,41 @@ impl<'a> AccountManagementView<'a> {
fn show(&mut self, ui: &mut egui::Ui) { fn show(&mut self, ui: &mut egui::Ui) {
ui.add(self.buttons_widget()); ui.add(self.buttons_widget());
ui.add_space(8.0); ui.add_space(8.0);
self.show_accounts(ui); scroll_area().show(ui, |ui| {
self.show_accounts(ui);
});
} }
fn show_accounts(&mut self, ui: &mut egui::Ui) { fn show_accounts(&mut self, ui: &mut egui::Ui) {
scroll_area().show(ui, |ui| { ui.horizontal_wrapped(|ui| {
ui.horizontal_wrapped(|ui| { let maybe_remove = self.simple_preview_controller.set_profile_previews(
let maybe_remove = self.simple_preview_controller.set_profile_previews( &self.account_manager,
&self.account_manager, ui,
ui, PERSISTED_ACCOUNT_MANAGEMENT.get_state(ui.ctx()),
PERSISTED_ACCOUNT_MANAGEMENT.get_state(ui.ctx()), desktop_account_card_ui(),
|ui, preview, edit_mode| { );
let mut should_remove = false;
ui.add_sized(preview.dimensions(), |ui: &mut egui::Ui| { self.maybe_remove_accounts(maybe_remove);
simple_preview_frame(ui)
.show(ui, |ui| {
ui.vertical_centered(|ui| {
ui.add(preview);
if edit_mode {
should_remove = ui
.add(delete_button(ui.visuals().dark_mode))
.clicked();
}
});
})
.response
});
should_remove
},
);
self.maybe_remove_accounts(maybe_remove);
});
}); });
} }
fn show_accounts_mobile(&mut self, ui: &mut egui::Ui) { fn show_accounts_mobile(&mut self, ui: &mut egui::Ui) {
scroll_area().show(ui, |ui| { ui.allocate_ui_with_layout(
ui.allocate_ui_with_layout( Vec2::new(ui.available_size_before_wrap().x, 32.0),
Vec2::new(ui.available_size_before_wrap().x, 32.0), Layout::top_down(egui::Align::Min),
Layout::top_down(egui::Align::Min), |ui| {
|ui| { // create all account 'cards' and get the indicies the user requested to remove
let maybe_remove = self.simple_preview_controller.set_profile_previews( let maybe_remove = self.simple_preview_controller.set_profile_previews(
&self.account_manager, &self.account_manager,
ui, ui,
PERSISTED_ACCOUNT_MANAGEMENT.get_state(ui.ctx()), PERSISTED_ACCOUNT_MANAGEMENT.get_state(ui.ctx()),
|ui, preview, edit_mode| { mobile_account_card_ui(), // closure for creating an account 'card'
let mut should_remove = false; );
ui.add_sized( // remove all account indicies user requested
Vec2::new(ui.available_width(), 50.0), self.maybe_remove_accounts(maybe_remove);
|ui: &mut egui::Ui| { },
Frame::none() );
.show(ui, |ui| {
ui.horizontal(|ui| {
ui.add(preview);
if edit_mode {
ui.with_layout(
Layout::right_to_left(Align::Center),
|ui| {
should_remove = ui
.add(delete_button(
ui.visuals().dark_mode,
))
.clicked();
},
);
}
});
})
.response
},
);
ui.add_space(16.0);
should_remove
},
);
self.maybe_remove_accounts(maybe_remove);
},
);
});
} }
fn maybe_remove_accounts(&mut self, account_indices: Option<Vec<usize>>) { fn maybe_remove_accounts(&mut self, account_indices: Option<Vec<usize>>) {
@@ -132,10 +87,12 @@ impl<'a> AccountManagementView<'a> {
fn show_mobile(&mut self, ui: &mut egui::Ui) -> egui::Response { fn show_mobile(&mut self, ui: &mut egui::Ui) -> egui::Response {
egui::CentralPanel::default() egui::CentralPanel::default()
.show(ui.ctx(), |ui| { .show(ui.ctx(), |ui| {
ui.add(title()); ui.add(mobile_title());
ui.add(self.buttons_widget()); ui.add(self.buttons_widget());
ui.add_space(8.0); ui.add_space(8.0);
self.show_accounts_mobile(ui); scroll_area().show(ui, |ui| {
self.show_accounts_mobile(ui);
});
}) })
.response .response
} }
@@ -172,6 +129,55 @@ impl<'a> AccountManagementView<'a> {
} }
} }
fn mobile_account_card_ui(
) -> fn(ui: &mut egui::Ui, preview: SimpleProfilePreview, edit_mode: bool) -> bool {
|ui, preview, edit_mode| {
let mut should_remove = false;
ui.add_sized(
Vec2::new(ui.available_width(), 50.0),
|ui: &mut egui::Ui| {
Frame::none()
.show(ui, |ui| {
ui.horizontal(|ui| {
ui.add(preview);
if edit_mode {
ui.with_layout(Layout::right_to_left(Align::Center), |ui| {
should_remove =
ui.add(delete_button(ui.visuals().dark_mode)).clicked();
});
}
});
})
.response
},
);
ui.add_space(16.0);
should_remove
}
}
fn desktop_account_card_ui(
) -> fn(ui: &mut egui::Ui, preview: SimpleProfilePreview, edit_mode: bool) -> bool {
|ui: &mut egui::Ui, preview, edit_mode| {
let mut should_remove = false;
ui.add_sized(preview.dimensions(), |ui: &mut egui::Ui| {
simple_preview_frame(ui)
.show(ui, |ui| {
ui.vertical_centered(|ui| {
ui.add(preview);
if edit_mode {
should_remove = ui.add(delete_button(ui.visuals().dark_mode)).clicked();
}
});
})
.response
});
should_remove
}
}
impl<'a> FromApp<'a> for AccountManagementView<'a> { impl<'a> FromApp<'a> for AccountManagementView<'a> {
fn from_app(app: &'a mut crate::Damus) -> Self { fn from_app(app: &'a mut crate::Damus) -> Self {
// TODO: don't hard-code key store & relay generator // TODO: don't hard-code key store & relay generator
@@ -195,11 +201,11 @@ fn simple_preview_frame(ui: &mut egui::Ui) -> Frame {
.inner_margin(12.0) .inner_margin(12.0)
} }
fn title() -> impl egui::Widget { fn mobile_title() -> impl egui::Widget {
|ui: &mut egui::Ui| { |ui: &mut egui::Ui| {
ui.vertical_centered(|ui| { ui.vertical_centered(|ui| {
ui.label( ui.label(
RichText::new("Accounts") RichText::new(GlobalPopupType::AccountManagement.title())
.text_style(NotedeckTextStyle::Heading2.text_style()) .text_style(NotedeckTextStyle::Heading2.text_style())
.strong(), .strong(),
); );