moved admin now

This commit is contained in:
filipriec
2025-08-30 19:26:12 +02:00
parent 43f5c1a764
commit 9ed558562b
2 changed files with 22 additions and 51 deletions

View File

@@ -8,7 +8,7 @@ use crate::pages::admin_panel::add_logic;
use crate::pages::admin_panel::add_table; use crate::pages::admin_panel::add_table;
use crate::pages::register::suggestions::RoleSuggestionsProvider; use crate::pages::register::suggestions::RoleSuggestionsProvider;
use crate::pages::admin::main::logic::handle_admin_navigation; use crate::pages::admin::main::logic::handle_admin_navigation;
use crate::pages::admin::admin::tui::handle_admin_selection; use crate::pages::admin::admin;
use crate::modes::general::command_navigation::{ use crate::modes::general::command_navigation::{
handle_command_navigation_event, NavigationState, handle_command_navigation_event, NavigationState,
}; };
@@ -332,6 +332,21 @@ impl EventHandler {
if !outcome.get_message_if_ok().is_empty() { if !outcome.get_message_if_ok().is_empty() {
return Ok(outcome); return Ok(outcome);
} }
} else if let Page::Admin(admin_state) = &mut router.current {
if matches!(auth_state.role, Some(UserRole::Admin)) {
if let Event::Key(key_event) = event {
if admin::event::handle_admin_event(
key_event,
config,
app_state,
admin_state,
buffer_state,
&mut self.command_message,
)? {
return Ok(EventOutcome::Ok(self.command_message.clone()));
}
}
}
} }
} }
if toggle_sidebar( if toggle_sidebar(
@@ -461,13 +476,6 @@ impl EventHandler {
return Ok(EventOutcome::Ok(String::new())); return Ok(EventOutcome::Ok(String::new()));
} }
} }
Page::Admin(state) => {
if matches!(auth_state.role, Some(UserRole::Admin)) {
if state.handle_movement(app_state, ma) {
return Ok(EventOutcome::Ok(String::new()));
}
}
}
Page::Intro(state) => { Page::Intro(state) => {
if state.handle_movement(ma) { if state.handle_movement(ma) {
return Ok(EventOutcome::Ok(String::new())); return Ok(EventOutcome::Ok(String::new()));
@@ -478,22 +486,6 @@ impl EventHandler {
} }
// Optional page-specific handlers (non-movement or rich actions) // Optional page-specific handlers (non-movement or rich actions)
if let Page::Admin(admin_state) = &mut router.current {
if matches!(auth_state.role, Some(UserRole::Admin)) {
// Full admin navigation
if handle_admin_navigation(
key_event,
config,
app_state,
admin_state,
buffer_state,
&mut self.command_message,
) {
return Ok(EventOutcome::Ok(self.command_message.clone()));
}
}
}
let client_clone = self.grpc_client.clone(); let client_clone = self.grpc_client.clone();
let sender_clone = self.save_logic_result_sender.clone(); let sender_clone = self.save_logic_result_sender.clone();
if add_logic::nav::handle_add_logic_navigation( if add_logic::nav::handle_add_logic_navigation(
@@ -606,7 +598,7 @@ impl EventHandler {
} }
UiContext::Admin => { UiContext::Admin => {
if let Page::Admin(admin_state) = &router.current { if let Page::Admin(admin_state) = &router.current {
handle_admin_selection( admin::tui::handle_admin_selection(
app_state, app_state,
admin_state, admin_state,
); );

View File

@@ -14,6 +14,7 @@ use crate::pages::login::LoginFormState;
use crate::pages::register::RegisterFormState; use crate::pages::register::RegisterFormState;
use crate::pages::admin::AdminState; use crate::pages::admin::AdminState;
use crate::pages::admin::AdminFocus; use crate::pages::admin::AdminFocus;
use crate::pages::admin::admin;
use crate::pages::intro::IntroState; use crate::pages::intro::IntroState;
use crate::pages::forms::{FormState, FieldDefinition}; use crate::pages::forms::{FormState, FieldDefinition};
use crate::pages::forms; use crate::pages::forms;
@@ -413,33 +414,11 @@ pub async fn run_ui() -> Result<()> {
admin_state = current.clone(); admin_state = current.clone();
} }
info!("Auth role at render: {:?}", auth_state.role); info!("Auth role at render: {:?}", auth_state.role);
match grpc_client.get_profile_tree().await {
Ok(refreshed_tree) => {
app_state.profile_tree = refreshed_tree;
}
Err(e) => {
error!("Failed to refresh profile tree for Admin panel: {}", e);
event_handler.command_message =
format!("Error refreshing admin data: {}", e);
}
}
let profile_names = app_state.profile_tree.profiles.iter()
.map(|p| p.name.clone())
.collect();
admin_state.set_profiles(profile_names);
if admin_state.current_focus == AdminFocus::default() // Use the admin loader instead of inline logic
|| !matches!(admin_state.current_focus, if let Err(e) = admin::loader::refresh_admin_state(&mut grpc_client, &mut app_state, &mut admin_state).await {
AdminFocus::InsideProfilesList | error!("Failed to refresh admin state: {}", e);
AdminFocus::Tables | AdminFocus::InsideTablesList | event_handler.command_message = format!("Error refreshing admin data: {}", e);
AdminFocus::Button1 | AdminFocus::Button2 | AdminFocus::Button3)
{
admin_state.current_focus = AdminFocus::ProfilesPane;
}
if admin_state.profile_list_state.selected().is_none()
&& !app_state.profile_tree.profiles.is_empty()
{
admin_state.profile_list_state.select(Some(0));
} }
router.navigate(Page::Admin(admin_state.clone())); router.navigate(Page::Admin(admin_state.clone()));