feat(types): Type Editor panel — CRUD de tipos en vivo (issue 0007)
- views_type_editor: panel "Types" con tabs Entities/Relations. Entities: name, color picker, shape combo, icon (ti-* + cp preview), principal_field combo, tabla de Fields (string/int/float/bool/date/url/enum) con required y enum values CSV; up/down/X por fila. Relations: name, color, style. Footer Save / Reload from disk + indicador dirty + error inline. - views_type_editor_delete_modal: confirm con conteo de entidades en uso. - types_registry: shape_name() + shape: emit en types_save_yaml para round-trip estable de la cosmetica editada en UI. - main.cpp: panel "Types" en g_panels; init types_draft tras load_input; want_types_save -> save + apply_types_yaml + rebuild atlas + bind + refresh inspector caches; want_types_reload simetrico; conteo de uso desde operations.db cuando se abre el modal de delete.
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
---
|
||||
id: 0007
|
||||
title: Type Editor panel — CRUD de tipos desde la app
|
||||
status: completed
|
||||
priority: medium
|
||||
created: 2026-04-30
|
||||
completed: 2026-05-01
|
||||
depends_on: [0005, 0006]
|
||||
---
|
||||
|
||||
## Objetivo
|
||||
|
||||
Panel "Types" dockeable que permita editar el `types.yaml` del proyecto
|
||||
activo desde dentro de la app. Cosmetica (color/shape/icon) y schema de
|
||||
campos (lista de fields con tipo). Save reescribe el yaml y dispara
|
||||
`apply_types_yaml` + reload del grafo.
|
||||
|
||||
## UI
|
||||
|
||||
- Tabs: "Entities" / "Relations".
|
||||
- Lista a la izquierda con los tipos. Botones `+` (anadir), `-` (borrar), drag para reordenar.
|
||||
- Panel derecho con la edicion del tipo seleccionado:
|
||||
- Entities: name, color (color picker), shape (combo), icon (input + preview), principal_field (combo entre los fields).
|
||||
- Relations: name, color, style.
|
||||
- Sub-seccion **Fields** (solo entities): tabla con name / type / required / values (para enum). Botones para anadir/quitar/reordenar fila.
|
||||
- Footer: `Save to types.yaml` (deshabilitado si no hay cambios) + `Reload from disk` (descarta cambios).
|
||||
|
||||
## Cambios en codigo
|
||||
|
||||
- `views.{h,cpp}`: nueva fn `views_type_editor(AppState&)` + entrada en panels menu.
|
||||
- `app_state`: anade `ParsedTypes types_draft;` y `bool types_dirty;`.
|
||||
- Usa `types_save_yaml` de 0005 para persistir.
|
||||
- Tras Save: `apply_types_yaml(graph, types_draft)` + rebuild del IconAtlas.
|
||||
|
||||
## Notas
|
||||
|
||||
- Borrar un tipo NO toca las entidades existentes con ese `type_ref` — se quedan con un tipo "huerfano" hasta que el usuario las cambie. Mostrar warning antes del delete con conteo de entidades afectadas.
|
||||
- Cambiar `principal_field` de un tipo regenera los labels visibles.
|
||||
|
||||
## Definicion de hecho
|
||||
|
||||
- Crear, editar y borrar entity/relation types desde la UI.
|
||||
- Editar fields (anadir, cambiar type, marcar required, definir enum values).
|
||||
- Save persiste a `projects/<activo>/types.yaml` y aplica al grafo en vivo.
|
||||
- Reload from disk descarta cambios.
|
||||
Reference in New Issue
Block a user