From ef30cc7d1b85df71b879ac0d28eb07275f61d1c7 Mon Sep 17 00:00:00 2001 From: reugenio Date: Sat, 27 Dec 2025 23:00:02 +0100 Subject: [PATCH] fix(table_core): Show pending values from RowEditBuffer in render Fix Tab showing empty cell after editing: - Add edit_buffer field to DrawRowsConfig - drawRowsWithDataSource now checks RowEditBuffer before DataSource - VirtualAdvancedTable passes row_edit_buffer to render Priority: RowEditBuffer (user typed) > DataSource (DB/memory) --- src/widgets/table_core.zig | 18 +++++++++++++++++- .../virtual_advanced_table.zig | 1 + 2 files changed, 18 insertions(+), 1 deletion(-) 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, );