mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-08 17:06:15 -08:00
Continues the workspace-shell facade decomposition by relocating two clusters from the parent template into the components that own them. Xtream import overlay: - New WorkspaceShellImportOverlayComponent injects WorkspaceShellXtreamImportService directly. The 70-line inline overlay block in workspace-shell.component.html collapses to a single <app-workspace-shell-import-overlay /> element, gated by facade.showXtreamImportOverlay(). - Overlay-specific styles move from workspace-shell.component.scss into the child component (~125 lines relocated). - Facade drops 14 import re-export lines plus the cancelXtreamImport delegation. The two facade tests that exercised label generation now resolve the service via TestBed.inject and assert against it directly. Header bulk action: - WorkspaceShellHeaderComponent gains headerBulkAction input and headerBulkActionRequested output, plus a button that renders the action when present (next to the existing headerShortcut button). - The parent template wires facade.headerBulkAction() → facade.runHeaderBulkAction(). The facade keeps the cross-cutting computed and the multi-store dispatch method since both span multiple stores. Verification: - workspace-shell.facade.spec.ts: 20/20 passing (two assertions retargeted at WorkspaceShellXtreamImportService). - Full feature lib: 53/60 passing — same 7 pre-existing failures. - pnpm nx build web --configuration=production: success. - pnpm nx lint workspace-shell-feature: clean. - pnpm nx run web-e2e:e2e-ci--src/basic.e2e.ts: 3/3 across browsers. - pnpm nx run web-e2e:e2e-ci--src/settings.e2e.ts: 12/12 across browsers. Facade: 917 → 897 lines. The bulk-action button now actually renders in the header — closing a latent gap where the computed existed on the facade but had no template binding. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Entire-Checkpoint: c2cea9c530e6