add RoutableWidgetState conception
holds the routes for an arbitrary widget Signed-off-by: kernelkind <kernelkind@gmail.com>
This commit is contained in:
committed by
William Casarin
parent
df4e331d33
commit
ee0029268f
11
src/app.rs
11
src/app.rs
@@ -13,7 +13,8 @@ use crate::key_storage::KeyStorageType;
|
|||||||
use crate::note::NoteRef;
|
use crate::note::NoteRef;
|
||||||
use crate::notecache::{CachedNote, NoteCache};
|
use crate::notecache::{CachedNote, NoteCache};
|
||||||
use crate::relay_pool_manager::RelayPoolManager;
|
use crate::relay_pool_manager::RelayPoolManager;
|
||||||
use crate::route::Route;
|
use crate::routable_widget_state::RoutableWidgetState;
|
||||||
|
use crate::route::{ManageAccountRoute, Route};
|
||||||
use crate::subscriptions::{SubKind, Subscriptions};
|
use crate::subscriptions::{SubKind, Subscriptions};
|
||||||
use crate::thread::{DecrementResult, Threads};
|
use crate::thread::{DecrementResult, Threads};
|
||||||
use crate::timeline::{Timeline, TimelineKind, TimelineSource, ViewFilter};
|
use crate::timeline::{Timeline, TimelineKind, TimelineSource, ViewFilter};
|
||||||
@@ -49,6 +50,7 @@ pub struct Damus {
|
|||||||
pub pool: RelayPool,
|
pub pool: RelayPool,
|
||||||
|
|
||||||
pub columns: Columns,
|
pub columns: Columns,
|
||||||
|
pub account_management_view_state: RoutableWidgetState<ManageAccountRoute>,
|
||||||
pub ndb: Ndb,
|
pub ndb: Ndb,
|
||||||
pub unknown_ids: UnknownIds,
|
pub unknown_ids: UnknownIds,
|
||||||
pub drafts: Drafts,
|
pub drafts: Drafts,
|
||||||
@@ -697,6 +699,7 @@ impl Damus {
|
|||||||
accounts,
|
accounts,
|
||||||
frame_history: FrameHistory::default(),
|
frame_history: FrameHistory::default(),
|
||||||
show_account_switcher: false,
|
show_account_switcher: false,
|
||||||
|
account_management_view_state: RoutableWidgetState::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -739,6 +742,7 @@ impl Damus {
|
|||||||
accounts: AccountManager::new(None, KeyStorageType::None),
|
accounts: AccountManager::new(None, KeyStorageType::None),
|
||||||
frame_history: FrameHistory::default(),
|
frame_history: FrameHistory::default(),
|
||||||
show_account_switcher: false,
|
show_account_switcher: false,
|
||||||
|
account_management_view_state: RoutableWidgetState::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -949,11 +953,6 @@ fn render_nav(show_postbox: bool, col: usize, app: &mut Damus, ui: &mut egui::Ui
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
Route::ManageAccount => {
|
|
||||||
ui.label("account management view");
|
|
||||||
None
|
|
||||||
}
|
|
||||||
|
|
||||||
Route::Relays => {
|
Route::Relays => {
|
||||||
let manager = RelayPoolManager::new(&mut app.pool);
|
let manager = RelayPoolManager::new(&mut app.pool);
|
||||||
RelayView::new(manager).ui(ui);
|
RelayView::new(manager).ui(ui);
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ mod post;
|
|||||||
mod profile;
|
mod profile;
|
||||||
pub mod relay_pool_manager;
|
pub mod relay_pool_manager;
|
||||||
mod result;
|
mod result;
|
||||||
|
mod routable_widget_state;
|
||||||
mod route;
|
mod route;
|
||||||
mod subscriptions;
|
mod subscriptions;
|
||||||
mod test_data;
|
mod test_data;
|
||||||
|
|||||||
26
src/routable_widget_state.rs
Normal file
26
src/routable_widget_state.rs
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#[derive(Default)]
|
||||||
|
pub struct RoutableWidgetState<R: Clone> {
|
||||||
|
routes: Vec<R>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<R: Clone> RoutableWidgetState<R> {
|
||||||
|
pub fn route_to(&mut self, route: R) {
|
||||||
|
self.routes.push(route);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn clear(&mut self) {
|
||||||
|
self.routes.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn go_back(&mut self) {
|
||||||
|
self.routes.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn top(&self) -> Option<R> {
|
||||||
|
self.routes.last().cloned()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_routes(&self) -> Vec<R> {
|
||||||
|
self.routes.clone()
|
||||||
|
}
|
||||||
|
}
|
||||||
29
src/route.rs
29
src/route.rs
@@ -1,23 +1,31 @@
|
|||||||
use egui::{Response, RichText};
|
use egui::RichText;
|
||||||
use enostr::NoteId;
|
use enostr::NoteId;
|
||||||
use std::fmt::{self};
|
use std::fmt::{self};
|
||||||
|
use strum_macros::Display;
|
||||||
|
|
||||||
use crate::{ui::AccountManagementView, Damus};
|
use crate::ui::{
|
||||||
|
account_login_view::AccountLoginResponse, account_management::AccountManagementViewResponse,
|
||||||
|
};
|
||||||
|
|
||||||
/// App routing. These describe different places you can go inside Notedeck.
|
/// App routing. These describe different places you can go inside Notedeck.
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub enum Route {
|
pub enum Route {
|
||||||
Timeline(String),
|
Timeline(String),
|
||||||
ManageAccount,
|
|
||||||
Thread(NoteId),
|
Thread(NoteId),
|
||||||
Reply(NoteId),
|
Reply(NoteId),
|
||||||
Relays,
|
Relays,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, Default, Display)]
|
||||||
|
pub enum ManageAccountRoute {
|
||||||
|
#[default]
|
||||||
|
AccountManagement,
|
||||||
|
AddAccount,
|
||||||
|
}
|
||||||
|
|
||||||
impl fmt::Display for Route {
|
impl fmt::Display for Route {
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
match self {
|
match self {
|
||||||
Route::ManageAccount => write!(f, "Manage Account"),
|
|
||||||
Route::Timeline(name) => write!(f, "{}", name),
|
Route::Timeline(name) => write!(f, "{}", name),
|
||||||
Route::Thread(_id) => write!(f, "Thread"),
|
Route::Thread(_id) => write!(f, "Thread"),
|
||||||
Route::Reply(_id) => write!(f, "Reply"),
|
Route::Reply(_id) => write!(f, "Reply"),
|
||||||
@@ -27,16 +35,8 @@ impl fmt::Display for Route {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Route {
|
impl Route {
|
||||||
pub fn show_global_popup(&self, app: &mut Damus, ui: &mut egui::Ui) -> Option<Response> {
|
|
||||||
match self {
|
|
||||||
Route::ManageAccount => AccountManagementView::ui(app, ui),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn title(&self) -> RichText {
|
pub fn title(&self) -> RichText {
|
||||||
match self {
|
match self {
|
||||||
Route::ManageAccount => RichText::new("Manage Account").size(24.0),
|
|
||||||
Route::Thread(_) => RichText::new("Thread"),
|
Route::Thread(_) => RichText::new("Thread"),
|
||||||
Route::Reply(_) => RichText::new("Reply"),
|
Route::Reply(_) => RichText::new("Reply"),
|
||||||
Route::Relays => RichText::new("Relays"),
|
Route::Relays => RichText::new("Relays"),
|
||||||
@@ -44,3 +44,8 @@ impl Route {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub enum ManageAcountRouteResponse {
|
||||||
|
AccountManagement(AccountManagementViewResponse),
|
||||||
|
AddAccount(AccountLoginResponse),
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user