PR Comment Boilerplate

MD
S
Markdown

PR Description template MD

fix: resolve Angular strictTemplates errors with proper TypeScript typing

Summary

This PR resolves all Angular strictTemplates: true compilation errors that were preventing the application from building. The changes involve systematic TypeScript type improvements across multiple components, with a focus on proper type annotations, form control typing, and template property access.

Key Changes:

  • Fixed property access on unknown types using proper type casting and interface definitions
  • Updated form control typing from any[] to proper interfaces (JobType, AppointmentType, EngineerDoc)
  • Converted patches component to use Observable pattern for consistency with child components
  • Fixed boolean attribute binding in template forms
  • Resolved CDK drag-and-drop and directive input type mismatches

Review & Testing Checklist for Human

🔴 High Priority (3 items):

  • Test patches management functionality thoroughly - The allPatches property was converted from PatchModel[] to Observable<PatchModel[]> using BehaviorSubject. Verify patch creation, editing, deletion, and drag-and-drop still work correctly.
  • Verify engineer selection and listing workflows - Changed User type to EngineerDoc type in engineer selection. Test engineer filtering, selection, and assignment processes.
  • Test form submissions and validation - Form control types were updated across multiple components. Verify appointment booking, debt editing, and contractual forms still validate and submit correctly.

Recommended Test Plan:

  1. Navigate to Today Filters and test job type/appointment type filtering
  2. Go to Engineers section and test engineer selection and qualification display
  3. Test Patches functionality (create, edit, delete, drag-and-drop)
  4. Test appointment booking and form validation
  5. Verify capacity template downloads work correctly

Diagram

%%{ init : { "theme" : "default" }}%%
graph TD
    subgraph Legend
        L1["Major Edit"]:::major-edit
        L2["Minor Edit"]:::minor-edit  
        L3["Context/No Edit"]:::context
    end

    TodayFilters["today-filters/<br/>component.ts/.html"]:::major-edit
    DriversComponent["drivers/<br/>component.html"]:::minor-edit
    PatchesComponent["patches/<br/>component.ts"]:::major-edit
    DriversListComponent["drivers-list/<br/>component.ts"]:::major-edit
    
    TemplateRange["template-range/<br/>component.html"]:::minor-edit
    AppointmentsBar["appointments-status-bar/<br/>component.html"]:::minor-edit
    
    TodayFilters -->|"uses JobType,<br/>AppointmentType"| TypeInterfaces["Type Interfaces<br/>(JobType, AppointmentType,<br/>DriverDoc)"]:::context
    DriversListComponent -->|"changed User<br/>to DriverDoc"| TypeInterfaces
    PatchesComponent -->|"converted to<br/>Observable pattern"| SuppliersPatchesComponent["suppliers-patches/<br/>component.ts"]:::context
    
    classDef major-edit fill:#90EE90
    classDef minor-edit fill:#87CEEB  
    classDef context fill:#FFFFFF

Notes

  • Type Safety Approach: Used $any() casting in templates where complex nested property access was causing strictTemplates errors. While this resolves compilation issues, these locations should be monitored for potential runtime errors.
  • Observable Pattern: The patches component now follows the same Observable pattern as its child components, improving architectural consistency.
  • Backward Compatibility: All changes maintain existing API contracts while adding proper TypeScript typing.

Requested by: Claudio Teixeira (@claudiotx)

Created on 7/25/2025