compiled
This commit is contained in:
@@ -15,7 +15,8 @@ use ratatui::{
|
|||||||
};
|
};
|
||||||
use crate::state::app::highlight::HighlightState;
|
use crate::state::app::highlight::HighlightState;
|
||||||
use canvas::canvas::{render_canvas, HighlightState as CanvasHighlightState}; // Use canvas library's render function
|
use canvas::canvas::{render_canvas, HighlightState as CanvasHighlightState}; // Use canvas library's render function
|
||||||
use canvas::autocomplete::gui::render_autocomplete_dropdown; // Use canvas library's autocomplete dropdown
|
use canvas::autocomplete::gui::render_autocomplete_dropdown;
|
||||||
|
use canvas::autocomplete::AutocompleteCanvasState;
|
||||||
|
|
||||||
// Helper function to convert between HighlightState types
|
// Helper function to convert between HighlightState types
|
||||||
fn convert_highlight_state(local: &HighlightState) -> CanvasHighlightState {
|
fn convert_highlight_state(local: &HighlightState) -> CanvasHighlightState {
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
// src/functions/modes/edit/auth_e.rs
|
// src/functions/modes/edit/auth_e.rs
|
||||||
|
|
||||||
use crate::services::grpc_client::GrpcClient;
|
use crate::services::grpc_client::GrpcClient;
|
||||||
use crate::state::pages::canvas_state::CanvasState;
|
|
||||||
use crate::state::pages::form::FormState;
|
use crate::state::pages::form::FormState;
|
||||||
use crate::state::pages::auth::RegisterState;
|
use crate::state::pages::auth::RegisterState;
|
||||||
use crate::state::app::state::AppState;
|
use crate::state::app::state::AppState;
|
||||||
use crate::tui::functions::common::form::{revert, save};
|
use crate::tui::functions::common::form::{revert, save};
|
||||||
use crossterm::event::{KeyCode, KeyEvent};
|
use crossterm::event::{KeyCode, KeyEvent};
|
||||||
|
use canvas::autocomplete::AutocompleteCanvasState;
|
||||||
|
use canvas::canvas::CanvasState;
|
||||||
use std::any::Any;
|
use std::any::Any;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
|
||||||
@@ -295,53 +296,42 @@ pub async fn execute_edit_action<S: CanvasState + Any + Send>(
|
|||||||
"suggestion_down" | "suggestion_up" | "select_suggestion" | "exit_suggestion_mode" => {
|
"suggestion_down" | "suggestion_up" | "select_suggestion" | "exit_suggestion_mode" => {
|
||||||
// Attempt to downcast to RegisterState to handle suggestion logic here
|
// Attempt to downcast to RegisterState to handle suggestion logic here
|
||||||
if let Some(register_state) = (state as &mut dyn Any).downcast_mut::<RegisterState>() {
|
if let Some(register_state) = (state as &mut dyn Any).downcast_mut::<RegisterState>() {
|
||||||
// Only handle if it's the role field (index 4)
|
// Only handle if it's the role field (index 4) and autocomplete is active
|
||||||
if register_state.current_field() == 4 {
|
if register_state.current_field() == 4 && register_state.is_autocomplete_active() {
|
||||||
match action {
|
match action {
|
||||||
"suggestion_down" if register_state.in_suggestion_mode => {
|
"suggestion_down" => {
|
||||||
let max_index = register_state.role_suggestions.len().saturating_sub(1);
|
if let Some(autocomplete_state) = register_state.autocomplete_state_mut() {
|
||||||
let current_index = register_state.selected_suggestion_index.unwrap_or(0);
|
autocomplete_state.select_next();
|
||||||
register_state.selected_suggestion_index = Some(if current_index >= max_index { 0 } else { current_index + 1 });
|
Ok("Suggestion changed down".to_string())
|
||||||
Ok("Suggestion changed down".to_string())
|
} else {
|
||||||
|
Ok("No autocomplete state".to_string())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
"suggestion_up" if register_state.in_suggestion_mode => {
|
"suggestion_up" => {
|
||||||
let max_index = register_state.role_suggestions.len().saturating_sub(1);
|
if let Some(autocomplete_state) = register_state.autocomplete_state_mut() {
|
||||||
let current_index = register_state.selected_suggestion_index.unwrap_or(0);
|
autocomplete_state.select_previous();
|
||||||
register_state.selected_suggestion_index = Some(if current_index == 0 { max_index } else { current_index.saturating_sub(1) });
|
Ok("Suggestion changed up".to_string())
|
||||||
Ok("Suggestion changed up".to_string())
|
} else {
|
||||||
|
Ok("No autocomplete state".to_string())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
"select_suggestion" if register_state.in_suggestion_mode => {
|
"select_suggestion" => {
|
||||||
if let Some(index) = register_state.selected_suggestion_index {
|
if let Some(message) = register_state.apply_autocomplete_selection() {
|
||||||
if let Some(selected_role) = register_state.role_suggestions.get(index).cloned() {
|
Ok(message)
|
||||||
register_state.role = selected_role.clone(); // Update the role field
|
|
||||||
register_state.in_suggestion_mode = false; // Exit suggestion mode
|
|
||||||
register_state.show_role_suggestions = false; // Hide suggestions
|
|
||||||
register_state.selected_suggestion_index = None; // Clear selection
|
|
||||||
Ok(format!("Selected role: {}", selected_role)) // Return success message
|
|
||||||
} else {
|
|
||||||
Ok("Selected suggestion index out of bounds.".to_string()) // Error case
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
Ok("No suggestion selected".to_string())
|
Ok("No suggestion selected".to_string())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"exit_suggestion_mode" => { // Handle Esc or other conditions
|
"exit_suggestion_mode" => {
|
||||||
register_state.show_role_suggestions = false;
|
register_state.deactivate_autocomplete();
|
||||||
register_state.selected_suggestion_index = None;
|
|
||||||
register_state.in_suggestion_mode = false;
|
|
||||||
Ok("Suggestions hidden".to_string())
|
Ok("Suggestions hidden".to_string())
|
||||||
}
|
}
|
||||||
_ => {
|
_ => Ok("Suggestion action ignored: State mismatch.".to_string())
|
||||||
// Action is suggestion-related but state doesn't match (e.g., not in suggestion mode)
|
|
||||||
Ok("Suggestion action ignored: State mismatch.".to_string())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// It's RegisterState, but not the role field
|
Ok("Suggestion action ignored: Not on role field or autocomplete not active.".to_string())
|
||||||
Ok("Suggestion action ignored: Not on role field.".to_string())
|
}
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// Downcast failed - this action is only for RegisterState
|
|
||||||
Ok(format!("Action '{}' not applicable for this state type.", action))
|
Ok(format!("Action '{}' not applicable for this state type.", action))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
// src/functions/modes/read_only/auth_ro.rs
|
// src/functions/modes/read_only/auth_ro.rs
|
||||||
|
|
||||||
use crate::config::binds::key_sequences::KeySequenceTracker;
|
use crate::config::binds::key_sequences::KeySequenceTracker;
|
||||||
use crate::state::pages::canvas_state::CanvasState;
|
|
||||||
use crate::state::app::state::AppState;
|
use crate::state::app::state::AppState;
|
||||||
|
use canvas::canvas::CanvasState;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
|
|||||||
@@ -3,14 +3,15 @@
|
|||||||
use crate::config::binds::config::Config;
|
use crate::config::binds::config::Config;
|
||||||
use crate::config::binds::key_sequences::KeySequenceTracker;
|
use crate::config::binds::key_sequences::KeySequenceTracker;
|
||||||
use crate::services::grpc_client::GrpcClient;
|
use crate::services::grpc_client::GrpcClient;
|
||||||
use crate::state::pages::{canvas_state::CanvasState, auth::RegisterState};
|
|
||||||
use crate::state::pages::auth::LoginState;
|
use crate::state::pages::auth::LoginState;
|
||||||
|
use crate::state::pages::auth::RegisterState;
|
||||||
|
use crate::state::pages::canvas_state::CanvasState as LocalCanvasState;
|
||||||
use crate::state::pages::form::FormState;
|
use crate::state::pages::form::FormState;
|
||||||
use crate::state::pages::add_logic::AddLogicState;
|
use crate::state::pages::add_logic::AddLogicState;
|
||||||
use crate::state::pages::add_table::AddTableState;
|
use crate::state::pages::add_table::AddTableState;
|
||||||
use crate::state::app::state::AppState;
|
use crate::state::app::state::AppState;
|
||||||
use crate::functions::modes::read_only::{add_logic_ro, auth_ro, form_ro, add_table_ro};
|
use crate::functions::modes::read_only::{add_logic_ro, auth_ro, form_ro, add_table_ro};
|
||||||
use canvas::{canvas::CanvasAction, dispatcher::ActionDispatcher, canvas::ActionResult};
|
use canvas::{canvas::{CanvasAction, CanvasState, ActionResult}, dispatcher::ActionDispatcher};
|
||||||
use crossterm::event::KeyEvent;
|
use crossterm::event::KeyEvent;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
use crate::tui::terminal::core::TerminalCore;
|
use crate::tui::terminal::core::TerminalCore;
|
||||||
use crate::state::app::state::AppState;
|
use crate::state::app::state::AppState;
|
||||||
use crate::state::pages::{form::FormState, auth::LoginState, auth::RegisterState};
|
use crate::state::pages::{form::FormState, auth::LoginState, auth::RegisterState};
|
||||||
use crate::state::pages::canvas_state::CanvasState;
|
use canvas::canvas::CanvasState;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
|
||||||
pub struct CommandHandler;
|
pub struct CommandHandler;
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ use crate::state::pages::auth::LoginState;
|
|||||||
use crate::state::pages::auth::RegisterState;
|
use crate::state::pages::auth::RegisterState;
|
||||||
use crate::state::pages::intro::IntroState;
|
use crate::state::pages::intro::IntroState;
|
||||||
use crate::state::pages::admin::AdminState;
|
use crate::state::pages::admin::AdminState;
|
||||||
use crate::state::pages::canvas_state::CanvasState;
|
|
||||||
use crate::ui::handlers::context::UiContext;
|
use crate::ui::handlers::context::UiContext;
|
||||||
use crate::modes::handlers::event::EventOutcome;
|
use crate::modes::handlers::event::EventOutcome;
|
||||||
use crate::modes::general::command_navigation::{handle_command_navigation_event, NavigationState};
|
use crate::modes::general::command_navigation::{handle_command_navigation_event, NavigationState};
|
||||||
|
use canvas::canvas::CanvasState;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
|
|
||||||
pub async fn handle_navigation_event(
|
pub async fn handle_navigation_event(
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ use crate::state::pages::auth::LoginState;
|
|||||||
use crate::state::app::state::AppState;
|
use crate::state::app::state::AppState;
|
||||||
use crate::state::app::buffer::{AppView, BufferState};
|
use crate::state::app::buffer::{AppView, BufferState};
|
||||||
use crate::config::storage::storage::{StoredAuthData, save_auth_data};
|
use crate::config::storage::storage::{StoredAuthData, save_auth_data};
|
||||||
use crate::state::pages::canvas_state::CanvasState;
|
|
||||||
use crate::ui::handlers::context::DialogPurpose;
|
use crate::ui::handlers::context::DialogPurpose;
|
||||||
use common::proto::komp_ac::auth::LoginResponse;
|
use common::proto::komp_ac::auth::LoginResponse;
|
||||||
|
use canvas::canvas::CanvasState;
|
||||||
use anyhow::{Context, Result};
|
use anyhow::{Context, Result};
|
||||||
use tokio::spawn;
|
use tokio::spawn;
|
||||||
use tokio::sync::mpsc;
|
use tokio::sync::mpsc;
|
||||||
|
|||||||
@@ -4,11 +4,11 @@ use crate::services::auth::AuthClient;
|
|||||||
use crate::state::{
|
use crate::state::{
|
||||||
pages::auth::RegisterState,
|
pages::auth::RegisterState,
|
||||||
app::state::AppState,
|
app::state::AppState,
|
||||||
pages::canvas_state::CanvasState,
|
|
||||||
};
|
};
|
||||||
use crate::ui::handlers::context::DialogPurpose;
|
use crate::ui::handlers::context::DialogPurpose;
|
||||||
use crate::state::app::buffer::{AppView, BufferState};
|
use crate::state::app::buffer::{AppView, BufferState};
|
||||||
use common::proto::komp_ac::auth::AuthResponse;
|
use common::proto::komp_ac::auth::AuthResponse;
|
||||||
|
use canvas::canvas::CanvasState;
|
||||||
use anyhow::Context;
|
use anyhow::Context;
|
||||||
use tokio::spawn;
|
use tokio::spawn;
|
||||||
use tokio::sync::mpsc;
|
use tokio::sync::mpsc;
|
||||||
|
|||||||
Reference in New Issue
Block a user