dropdown is being triggered
This commit is contained in:
@@ -9,7 +9,7 @@ use crate::modes::common::commands::CommandHandler;
|
||||
use crate::modes::handlers::event::{EventHandler, EventOutcome};
|
||||
use crate::modes::handlers::mode_manager::{AppMode, ModeManager};
|
||||
use crate::state::pages::canvas_state::CanvasState;
|
||||
use crate::state::pages::form::FormState;
|
||||
use crate::state::pages::form::{FormState, FieldDefinition}; // Import FieldDefinition
|
||||
use crate::state::pages::auth::AuthState;
|
||||
use crate::state::pages::auth::LoginState;
|
||||
use crate::state::pages::auth::RegisterState;
|
||||
@@ -92,13 +92,19 @@ pub async fn run_ui() -> Result<()> {
|
||||
.await
|
||||
.context("Failed to initialize app state and form")?;
|
||||
|
||||
let filtered_columns = filter_user_columns(initial_columns_from_service);
|
||||
let initial_field_defs: Vec<FieldDefinition> = filter_user_columns(initial_columns_from_service)
|
||||
.into_iter()
|
||||
.map(|col_name| FieldDefinition {
|
||||
display_name: col_name.clone(),
|
||||
data_key: col_name,
|
||||
is_link: false,
|
||||
})
|
||||
.collect();
|
||||
|
||||
let mut form_state = FormState::new(
|
||||
initial_profile.clone(),
|
||||
initial_table.clone(),
|
||||
filtered_columns,
|
||||
vec![], // FIX 1: Provide the missing 4th argument
|
||||
initial_field_defs,
|
||||
);
|
||||
|
||||
UiService::fetch_and_set_table_count(&mut grpc_client, &mut form_state)
|
||||
@@ -334,36 +340,54 @@ pub async fn run_ui() -> Result<()> {
|
||||
.await
|
||||
{
|
||||
Ok(structure_response) => {
|
||||
let new_columns: Vec<String> = structure_response
|
||||
// --- START OF MODIFIED LOGIC ---
|
||||
let all_columns: Vec<String> = structure_response
|
||||
.columns
|
||||
.iter()
|
||||
.map(|c| c.name.clone())
|
||||
.collect();
|
||||
|
||||
// FIX 2: Look up links in the profile_tree
|
||||
let new_links: Vec<String> = app_state
|
||||
// 1. Process regular columns first, filtering out FKs
|
||||
let mut field_definitions: Vec<FieldDefinition> =
|
||||
filter_user_columns(all_columns)
|
||||
.into_iter()
|
||||
.filter(|col_name| !col_name.ends_with("_id")) // Exclude FKs
|
||||
.map(|col_name| FieldDefinition {
|
||||
display_name: col_name.clone(),
|
||||
data_key: col_name,
|
||||
is_link: false, // Regular fields are not links
|
||||
})
|
||||
.collect();
|
||||
|
||||
// 2. Process linked tables to create the correct labels
|
||||
let linked_tables: Vec<String> = app_state
|
||||
.profile_tree
|
||||
.profiles
|
||||
.iter()
|
||||
.find(|p| p.name == *prof_name)
|
||||
.and_then(|profile| {
|
||||
profile
|
||||
.tables
|
||||
.iter()
|
||||
.find(|t| t.name == *tbl_name)
|
||||
profile.tables.iter().find(|t| t.name == *tbl_name)
|
||||
})
|
||||
.map_or(vec![], |table| {
|
||||
table.depends_on.clone()
|
||||
.map_or(vec![], |table| table.depends_on.clone());
|
||||
|
||||
for linked_table_name in linked_tables {
|
||||
let base_name = linked_table_name
|
||||
.split_once('_')
|
||||
.map_or(linked_table_name.as_str(), |(_, rest)| rest);
|
||||
let data_key = format!("{}_id", base_name);
|
||||
let display_name = linked_table_name;
|
||||
|
||||
field_definitions.push(FieldDefinition {
|
||||
display_name,
|
||||
data_key,
|
||||
is_link: true, // These fields ARE links
|
||||
});
|
||||
|
||||
let filtered_columns =
|
||||
filter_user_columns(new_columns);
|
||||
|
||||
}
|
||||
// --- END OF MODIFIED LOGIC ---
|
||||
form_state = FormState::new(
|
||||
prof_name.clone(),
|
||||
tbl_name.clone(),
|
||||
filtered_columns,
|
||||
new_links,
|
||||
field_definitions,
|
||||
);
|
||||
|
||||
if let Err(e) = UiService::fetch_and_set_table_count(
|
||||
@@ -401,6 +425,7 @@ pub async fn run_ui() -> Result<()> {
|
||||
prev_view_table_name = current_view_table;
|
||||
table_just_switched = true;
|
||||
}
|
||||
|
||||
Err(e) => {
|
||||
app_state.update_dialog_content(
|
||||
&format!("Error fetching table structure: {}", e),
|
||||
|
||||
Reference in New Issue
Block a user