refactor: migra a control flow nativo (@if/@for/@switch) y elimina CommonModule

This commit is contained in:
2026-07-28 17:57:26 +02:00
parent c65e9f1cbd
commit 83af63ae5c
105 changed files with 1273 additions and 1268 deletions

View File

@@ -22,10 +22,12 @@ Construir: `nx build ui` · Lint: `nx lint ui`
| NgModules | 41 → 4 (sólo quedan los que aportan providers: `icon-registry`, `loaders`, `router-store`, `scroll-to`) |
| Componentes | 70, **todos** con `ChangeDetectionStrategy.OnPush` |
| Decoradores | 0 restantes: 460 `input()`, 6 `model()`, 20 `output()`, 8 `viewChild()`, 2 `viewChildren()`, 17 `contentChild()`, 6 `contentChildren()` |
| Control flow | `*ngIf`/`*ngFor`/`*ngSwitch` → `@if`/`@for`/`@switch` (110 `@if`, 26 `@for`, 3 `@switch`). Ya no se importa ninguna directiva de `CommonModule` |
Se usaron las migraciones oficiales de Angular (`@angular/core:standalone`,
`signal-input-migration`, `output-migration`, `signal-queries-migration`) y se
resolvió a mano lo que no cubren.
`signal-input-migration`, `output-migration`, `signal-queries-migration`,
`control-flow-migration`, `cleanup-unused-imports`) y se resolvió a mano lo que
no cubren.
## Decisiones que cambian comportamiento
@@ -79,6 +81,17 @@ Mantiene el runtime idéntico al original. Se pueden eliminar migrando a
`truncate : (33 || …)`, así que el fallback nunca se aplicaba. Ahora está
parentizado como se pretendía.
**8. Los 3 selects se convirtieron a control flow a mano.**
La migración automática se rindió con ellos: tenían un `*ngIf ... else` que
apuntaba a un `<ng-template>` con un `[ngSwitch]` dentro. Al reescribirlos hubo
que renombrar plantillas duplicadas (`#defaultSelected` aparecía dos veces en
ramas distintas del switch) a `#defaultSelectedFill`/`#defaultSelectedOutline`,
y en select-period `#defaultOption` → `#defaultMonthOption`/`#defaultYearOption`.
Los `*ngFor` sin `trackBy` pasaron a `track <item>`, que es lo que hacía `ngFor`
por defecto. En data-grid y select-carousel la migración generó
`track trackByFn(i, item)` pero esos `trackByFn` sólo declaran `index`: se
corrigió la aridad a `track trackByFn(i)`.
## Colisiones de nombres en el barrel
El origen tiene símbolos duplicados. En `index.ts` gana el primero y el otro se
@@ -104,7 +117,8 @@ omite (queda anotado en el fichero). Siguen siendo accesibles por ruta directa:
- **`Sector`** vivía en `deale-saas/util/models` (lib de aplicación, fuera de alcance); se trajo la interfaz a `util/models`.
- **ngrx 21 con Angular 22**: instalado con `--legacy-peer-deps` (aún no declara soporte para 22).
- **Lint**: `nx lint ui` falla con avisos heredados del código original —
`prefer-control-flow` (104: `*ngIf`/`*ngFor` en vez de `@if`/`@for`),
`directive-selector` (40), `prefer-inject` (33), a11y y `no-unused-vars`.
Nada bloquea el build. Hay migraciones oficiales para los dos primeros grupos:
`nx g @angular/core:control-flow-migration` y `nx g @angular/core:inject-migration`.
`prefer-inject` (51), `directive-selector` (46), `no-explicit-any` (35),
`no-unused-expressions` (33), a11y (`click-events-have-key-events`,
`interactive-supports-focus`, `label-has-associated-control`) y
`no-unused-vars`. Nada bloquea el build. Para el primer grupo hay migración
oficial: `nx g @angular/core:inject-migration`.