dialog on add table save working
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
use crossterm::event::{Event, KeyCode};
|
use crossterm::event::{Event, KeyCode};
|
||||||
use crate::config::binds::config::Config;
|
use crate::config::binds::config::Config;
|
||||||
use crate::ui::handlers::context::DialogPurpose;
|
use crate::ui::handlers::context::DialogPurpose;
|
||||||
use crate::state::app::state::AppState;
|
use crate::state::app::{state::AppState, buffer::AppView};
|
||||||
use crate::state::app::buffer::BufferState;
|
use crate::state::app::buffer::BufferState;
|
||||||
use crate::state::pages::auth::{LoginState, RegisterState};
|
use crate::state::pages::auth::{LoginState, RegisterState};
|
||||||
use crate::state::pages::admin::AdminState;
|
use crate::state::pages::admin::AdminState;
|
||||||
@@ -129,6 +129,16 @@ pub async fn handle_dialog_event(
|
|||||||
_ => { /* Handle unexpected index */ }
|
_ => { /* Handle unexpected index */ }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
DialogPurpose::SaveTableSuccess => {
|
||||||
|
match selected_index {
|
||||||
|
0 => { // "OK" button selected
|
||||||
|
app_state.hide_dialog();
|
||||||
|
buffer_state.update_history(AppView::Admin); // Navigate back
|
||||||
|
return Some(Ok(EventOutcome::Ok("Save success dialog dismissed.".to_string())));
|
||||||
|
}
|
||||||
|
_ => { /* Handle unexpected index */ }
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => {} // Ignore other general actions when dialog is shown
|
_ => {} // Ignore other general actions when dialog is shown
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
use std::env;
|
use std::env;
|
||||||
use common::proto::multieko2::table_definition::ProfileTreeResponse;
|
use common::proto::multieko2::table_definition::ProfileTreeResponse;
|
||||||
use crate::modes::handlers::mode_manager::AppMode;
|
use crate::modes::handlers::mode_manager::AppMode;
|
||||||
use crate::ui::handlers::context::DialogPurpose;
|
use crate::ui::handlers::context::{DialogPurpose, UiContext};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
|
||||||
pub struct DialogState {
|
pub struct DialogState {
|
||||||
@@ -123,6 +123,19 @@ impl AppState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Shows a standard success dialog after saving a table.
|
||||||
|
pub fn show_save_success_dialog(&mut self, message: &str) {
|
||||||
|
self.ui.dialog.dialog_show = true;
|
||||||
|
self.ui.dialog.dialog_title = "Save Successful".to_string();
|
||||||
|
self.ui.dialog.dialog_message = message.to_string();
|
||||||
|
self.ui.dialog.dialog_buttons = vec!["OK".to_string()];
|
||||||
|
self.ui.dialog.dialog_active_button_index = 0;
|
||||||
|
self.ui.dialog.purpose = Some(DialogPurpose::SaveTableSuccess);
|
||||||
|
self.ui.dialog.is_loading = false;
|
||||||
|
self.ui.focus_outside_canvas = true;
|
||||||
|
self.focused_button_index = 0; // Focus the first (only) button
|
||||||
|
}
|
||||||
|
|
||||||
/// Hides the dialog and clears its content.
|
/// Hides the dialog and clears its content.
|
||||||
pub fn hide_dialog(&mut self) {
|
pub fn hide_dialog(&mut self) {
|
||||||
self.ui.dialog.dialog_show = false;
|
self.ui.dialog.dialog_show = false;
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ pub enum DialogPurpose {
|
|||||||
RegisterSuccess,
|
RegisterSuccess,
|
||||||
RegisterFailed,
|
RegisterFailed,
|
||||||
ConfirmDeleteColumns, // add_table delete selected Columns
|
ConfirmDeleteColumns, // add_table delete selected Columns
|
||||||
|
SaveTableSuccess, // add_table save table
|
||||||
// TODO in the future:
|
// TODO in the future:
|
||||||
// ConfirmQuit,
|
// ConfirmQuit,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -166,28 +166,31 @@ pub async fn run_ui() -> Result<()> {
|
|||||||
|
|
||||||
// --- 1. Handle Terminal Events ---
|
// --- 1. Handle Terminal Events ---
|
||||||
let mut event_outcome_result = Ok(EventOutcome::Ok(String::new()));
|
let mut event_outcome_result = Ok(EventOutcome::Ok(String::new()));
|
||||||
|
let mut event_processed = false;
|
||||||
// Poll for events *after* drawing and checking pending actions
|
// Poll for events *after* drawing and checking pending actions
|
||||||
if crossterm_event::poll(std::time::Duration::from_millis(1))? {
|
if crossterm_event::poll(std::time::Duration::from_millis(1))? {
|
||||||
let event = event_reader.read_event().context("Failed to read terminal event")?;
|
let event = event_reader.read_event().context("Failed to read terminal event")?;
|
||||||
event_outcome_result = event_handler
|
event_processed = true; // Mark that we received and will process an event
|
||||||
.handle_event(
|
event_outcome_result = event_handler.handle_event(
|
||||||
event,
|
event,
|
||||||
&config,
|
&config,
|
||||||
&mut terminal,
|
&mut terminal,
|
||||||
&mut grpc_client,
|
&mut grpc_client,
|
||||||
&mut command_handler,
|
&mut command_handler,
|
||||||
&mut form_state,
|
&mut form_state,
|
||||||
&mut auth_state,
|
&mut auth_state,
|
||||||
&mut login_state,
|
&mut login_state,
|
||||||
&mut register_state,
|
&mut register_state,
|
||||||
&mut intro_state,
|
&mut intro_state,
|
||||||
&mut admin_state,
|
&mut admin_state,
|
||||||
&mut buffer_state,
|
&mut buffer_state,
|
||||||
&mut app_state,
|
&mut app_state,
|
||||||
total_count,
|
total_count,
|
||||||
&mut current_position,
|
&mut current_position,
|
||||||
)
|
).await;
|
||||||
.await;
|
}
|
||||||
|
|
||||||
|
if event_processed {
|
||||||
needs_redraw = true;
|
needs_redraw = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -226,13 +229,9 @@ pub async fn run_ui() -> Result<()> {
|
|||||||
Ok(result) => {
|
Ok(result) => {
|
||||||
app_state.hide_dialog(); // Hide loading indicator
|
app_state.hide_dialog(); // Hide loading indicator
|
||||||
match result {
|
match result {
|
||||||
Ok(success_message) => {
|
Ok(ref success_message) => {
|
||||||
event_handler.command_message = success_message;
|
app_state.show_save_success_dialog(success_message);
|
||||||
admin_state.add_table_state.has_unsaved_changes = false;
|
admin_state.add_table_state.has_unsaved_changes = false;
|
||||||
// Optionally refresh profile tree if needed
|
|
||||||
// let _ = UiService::initialize_app_state(&mut grpc_client, &mut app_state).await;
|
|
||||||
// Navigate back to Admin view
|
|
||||||
buffer_state.update_history(AppView::Admin);
|
|
||||||
}
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
event_handler.command_message = format!("Save failed: {}", e);
|
event_handler.command_message = format!("Save failed: {}", e);
|
||||||
|
|||||||
Reference in New Issue
Block a user