diff --git a/src/widgets/table_core.zig b/src/widgets/table_core.zig index 3fba438..fc63fea 100644 --- a/src/widgets/table_core.zig +++ b/src/widgets/table_core.zig @@ -565,6 +565,9 @@ pub const DrawRowsConfig = struct { /// ID de fila con cambios pendientes (dirty tracking visual) /// Si no es null y coincide con el row_id actual, se aplica blend naranja dirty_row_id: ?i64 = null, + /// Buffer de edición de fila para priorizar valores pendientes en renderizado + /// Permite mostrar lo que el usuario ha tecleado antes de que se guarde en BD + edit_buffer: ?*const RowEditBuffer = null, }; /// Dibuja las filas de una tabla usando TableDataSource. @@ -675,7 +678,20 @@ pub fn drawRowsWithDataSource( } // Obtener texto de la celda - const cell_text = datasource.getCellValueInto(row_idx, col_idx, cell_buffer); + // PRIORIDAD 1: Valor pendiente en RowEditBuffer (lo que el usuario tecleó) + // PRIORIDAD 2: Valor del DataSource (BD o memoria) + var cell_text: []const u8 = ""; + const row_id = datasource.getRowId(row_idx); + if (config.edit_buffer) |eb| { + if (eb.row_id == row_id) { + if (eb.getPendingValue(col_idx)) |pending| { + cell_text = pending; + } + } + } + if (cell_text.len == 0) { + cell_text = datasource.getCellValueInto(row_idx, col_idx, cell_buffer); + } // Copiar a frame allocator para persistencia durante render const text_to_draw = ctx.frameAllocator().dupe(u8, cell_text) catch cell_text; diff --git a/src/widgets/virtual_advanced_table/virtual_advanced_table.zig b/src/widgets/virtual_advanced_table/virtual_advanced_table.zig index d56d751..8b042cb 100644 --- a/src/widgets/virtual_advanced_table/virtual_advanced_table.zig +++ b/src/widgets/virtual_advanced_table/virtual_advanced_table.zig @@ -884,6 +884,7 @@ fn drawRows( .colors = render_colors, .columns = render_cols[0..num_cols], .dirty_row_id = dirty_id, + .edit_buffer = &list_state.row_edit_buffer, }, &cell_buffer, );