Snapshot de WIP acumulado de sesiones previas antes de merge wave 1
del flow 0008 (kanban_cpp + agent_runner_api + DoD schema).
Incluye:
- dev/flows/0008-kanban-cpp-and-agent-workflows.md
- dev/issues/0112-0119*.md (7 sub-issues)
- WIP previo en cmd/fn/doctor.go, registry/*, modules/, cpp/, etc.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Barra de chips superior de la tabla TQL: render y edicion de filtros activos, breakouts (group-by), agregaciones, sorts, joins con tablas secundarias, header-menu de columna (sort/filter/conditional-color/type-change), y area TQL (Show TQL / Apply TQL / Save .tql / Load .tql). Es la sub-funcion mas grande del refactor 0107c (~1000 LOC, 17 funciones). Sub-funcion extraida de modules/data_table/data_table.cpp (issue 0107c).
viz
table
imgui
ui
chips
filters
sort
aggregation
tql
cpp-tables
joins
data_table_color_rules_cpp_viz
data_table_cpp_viz
tql_emit_cpp_core
tql_apply_cpp_core
data_table_types_cpp_core
false
error_go_core
imgui
false
cpp/functions/viz/data_table_chips.cpp
imgui
name
desc
stg
Stage activo (st.stages[active]): contiene filters, breakouts, aggregations, sorts, derived. Mutado por todos los chips y popups de edicion.
name
desc
eff_headers / eff_cols
Headers y numero de columnas efectivas del stage activo (orig + derived). Usados en labels de chips y en los popups de anadir/editar.
name
desc
eff_types
Tipos de columna efectivos. Usados para filtrar los operadores disponibles (draw_typed_ops) y para formatear los popups.
name
desc
st (para joins y header-menu)
State completo: necesario para draw_joins_chips (accede a st.stages) y draw_header_menu (accede a st.color_rules, st.col_visible).
name
desc
joinables (para joins)
Vector de TableInput secundarias disponibles para join. Si vacio, draw_joins_chips no muestra nada.
Void. Todos los efectos son mutaciones de stg (Stage) o st (State) en respuesta a la interaccion del usuario.
Documentacion
Sub-funcion mas grande del refactor 0107c. Encapsula toda la UI de la barra de chips de la tabla TQL.
Mapa de funciones
Funcion
LOC aprox
Responsabilidad
draw_filter_chips
~85
Chips de filtros activos con X para borrar
draw_add_filter_popup
~55
Popup para anadir filtro nuevo
draw_edit_filter_popup
~42
Popup edicion de filtro existente (right-click en chip)
draw_breakout_chips
~93
Chips de breakout activos con X
draw_add_breakout_popup
~34
Popup anadir breakout (col de agrupacion)
draw_edit_breakout_popup
~24
Popup edicion breakout
draw_aggregation_chips
~50
Chips de agregaciones activas con X
draw_add_aggregation_popup
~50
Popup anadir agregacion (Count, Sum, Mean, ...)
draw_edit_agg_popup
~48
Popup edicion agregacion
draw_sort_chips
~70
Chips de sort activos con X
draw_add_sort_popup
~26
Popup anadir sort
draw_edit_sort_popup
~26
Popup edicion sort
apply_header_sort_click
~17
Sort al click en cabecera (Asc/Desc/none ciclo)
draw_joins_chips
~107
Chips de joins con tablas secundarias
draw_header_menu
~209
Menu contextual de columna (sort/filter/color/type)
draw_typed_ops
~8
Radio buttons de Op segun tipo de columna
type_supports_range
~3
Bool tipo soporta rango
draw_tql_bar
~95
Botones + modales TQL show/apply/save/load
Orden de llamada en el chrome
// Stage 0 (chrome_visible):
draw_joins_chips(st,joinables,hdrs,cols,types);draw_filter_chips(act,hdrs,cols,types);draw_add_filter_popup(act,hdrs,cols,types);draw_edit_filter_popup(act,hdrs,cols,types);draw_breakout_chips(act,hdrs,cols,types);// ... etc.
draw_sort_chips(act);draw_tql_bar(tql_bar,st,orig_headers,orig_types,cells,rows,orig_cols);
Llamar desde el entrypoint thin data_table::render() en el bloque chrome_visible. El orden importa: joins primero, luego filtros, breakouts, agregaciones, sorts, TQL bar. No llamar fuera del contexto de un frame ImGui activo.
Gotchas
draw_header_menu DEBE llamarse desde dentro del popup de cabecera (ImGui::BeginPopupContextItem) — no se puede llamar en el loop normal de render.
Los popups de add/edit usan IDs de ImGui fijos ("##addf", "##editf", etc.). Si se tienen multiples instancias de data_table en la misma ventana, usar ImGui::PushID(table_id) antes de llamar a los chips.
draw_tql_bar incluye los modales "Show TQL" y "Apply TQL" via ImGui::BeginPopupModal. Deben llamarse fuera del bloque PushStyleVar si los estilos interfieren con el modal.
apply_header_sort_click sin Shift reemplaza TODOS los sorts existentes por el nuevo. Es el comportamiento esperado para click simple. Shift agrega sort secundario.
draw_joins_chips asume que joinables es la slice de tables excluyendo la tabla principal. Si se pasa la tabla principal como joinable, se creara un self-join.