canvas required fields

This commit is contained in:
filipriec
2025-04-17 18:28:06 +02:00
parent f7493a8bc4
commit 5e47c53fcf

View File

@@ -14,34 +14,62 @@ pub fn handle_add_column_action(
) -> Option<AddTableFocus> { ) -> Option<AddTableFocus> {
// Trim and create owned Strings from inputs // Trim and create owned Strings from inputs
let table_name_val = add_table_state.table_name_input.trim().to_string(); let table_name_in = add_table_state.table_name_input.trim();
let column_name_val = add_table_state.column_name_input.trim().to_string(); let column_name_in = add_table_state.column_name_input.trim();
let column_type_val = add_table_state.column_type_input.trim().to_string(); let column_type_in = add_table_state.column_type_input.trim();
// Validate all inputs needed for this combined action // Validate all inputs needed for this combined action
if table_name_val.is_empty() { let has_table_name = !table_name_in.is_empty();
*command_message = "Table Name cannot be empty.".to_string(); let has_column_name = !column_name_in.is_empty();
None let has_column_type = !column_type_in.is_empty();
} else if column_name_val.is_empty() || column_type_val.is_empty() {
*command_message = "Column Name and Type cannot be empty.".to_string(); match (has_table_name, has_column_name, has_column_type) {
None // Indicate failure, no focus change desired from here // Case 1: Both column fields have input (Table name is optional here)
} else { (_, true, true) => {
add_table_state.table_name = table_name_val.clone(); let mut msg = String::new();
let new_column = ColumnDefinition { // Optionally update table name if provided
name: column_name_val.clone(), if has_table_name {
data_type: column_type_val, add_table_state.table_name = table_name_in.to_string();
}; msg.push_str(&format!("Table name set to '{}'. ", add_table_state.table_name));
add_table_state.columns.push(new_column); }
add_table_state.table_name_input.clear(); // Add the column
add_table_state.column_name_input.clear(); let new_column = ColumnDefinition {
add_table_state.column_type_input.clear(); name: column_name_in.to_string(),
add_table_state.table_name_cursor_pos = 0; data_type: column_type_in.to_string(),
add_table_state.column_name_cursor_pos = 0; };
add_table_state.column_type_cursor_pos = 0; add_table_state.columns.push(new_column.clone()); // Clone for msg
add_table_state.has_unsaved_changes = true; msg.push_str(&format!("Column '{}' added.", new_column.name));
*command_message = format!("Table name set to '{}'. Column '{}' added.", table_name_val, column_name_val); *command_message = msg;
// Indicate success and suggest moving focus back to the name input
Some(AddTableFocus::InputColumnName) // Clear all inputs and reset cursors
add_table_state.table_name_input.clear();
add_table_state.column_name_input.clear();
add_table_state.column_type_input.clear();
add_table_state.table_name_cursor_pos = 0;
add_table_state.column_name_cursor_pos = 0;
add_table_state.column_type_cursor_pos = 0;
add_table_state.has_unsaved_changes = true;
Some(AddTableFocus::InputColumnName) // Focus for next column
}
// Case 2: Only one column field has input (Error)
(_, true, false) | (_, false, true) => {
*command_message = "Both Column Name and Type are required to add a column.".to_string();
None // Indicate validation failure
}
// Case 3: Only Table name has input (No column input)
(true, false, false) => {
add_table_state.table_name = table_name_in.to_string();
*command_message = format!("Table name set to '{}'.", add_table_state.table_name);
// Clear only table name input
add_table_state.table_name_input.clear();
add_table_state.table_name_cursor_pos = 0;
add_table_state.has_unsaved_changes = true;
Some(AddTableFocus::InputTableName) // Keep focus here
}
// Case 4: All fields are empty
(false, false, false) => {
*command_message = "No input provided.".to_string();
None
}
} }
} }